Проблемы популярных подходов
Большинство ответов, которые вы найдете в Интернете, предложат вам либо установить зависимость в вашем локальном репозитории, либо указать «системную» область действия в pom
и распределить зависимость с источником вашего проекта. Но оба эти решения на самом деле несовершенны.
Почему вы не должны применять подход «Install to Local Repo»
Когда вы устанавливаете зависимость в свой локальный репозиторий, он остается там. С вашим артефактом распространения все будет хорошо, если у него есть доступ к этому хранилищу. Проблема в том, что в большинстве случаев этот репозиторий будет находиться на вашем локальном компьютере, поэтому не будет никакого способа разрешить эту зависимость на любом другом компьютере. Очевидно, что зависимость вашего артефакта от конкретной машины - это не способ справиться с ситуацией. В противном случае эта зависимость должна быть установлена локально на каждой машине, работающей с этим проектом, что не лучше.
Почему вы не должны применять подход «Scope System»
Банки, от которых зависит подход System Scope, не устанавливаются ни в какое хранилище и не подключаются к целевым пакетам. Вот почему в вашем дистрибутиве не будет способа разрешить эту зависимость при использовании. Именно это, я считаю, и стало причиной того, что использование системной области даже устарело. В любом случае, вы не хотите полагаться на устаревшую функцию.
Статическое решение для репозитория в проекте
После размещения этого в вашем pom
:
<repository>
<id>repo</id>
<releases>
<enabled>true</enabled>
<checksumPolicy>ignore</checksumPolicy>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
<url>file://${project.basedir}/repo</url>
</repository>
для каждого артефакта с групповым идентификатором формы x.y.z
Maven будет включать следующее местоположение в директории вашего проекта при поиске артефактов:
repo/
| - x/
| | - y/
| | | - z/
| | | | - ${artifactId}/
| | | | | - ${version}/
| | | | | | - ${artifactId}-${version}.jar
Подробнее об этом вы можете прочитать в этом блоге .
Используйте Maven для установки в репозиторий проекта
Вместо того, чтобы создавать эту структуру вручную, я рекомендую использовать плагин Maven для установки ваших jar-файлов в качестве артефактов. Итак, чтобы установить артефакт в репозиторий в проекте в repo
папке выполните:
mvn install:install-file -DlocalRepositoryPath=repo -DcreateChecksum=true -Dpackaging=jar -Dfile=[your-jar] -DgroupId=[...] -DartifactId=[...] -Dversion=[...]
Если вы выберете этот подход, вы сможете упростить объявление репозитория pom
до:
<repository>
<id>repo</id>
<url>file://${project.basedir}/repo</url>
</repository>
Вспомогательный скрипт
Поскольку выполнение команды установки для каждой библиотеки является довольно раздражающим и определенно подверженным ошибкам, я создал служебный сценарий, который автоматически устанавливает все lib
файлы jar из папки в репозиторий проекта, одновременно автоматически обрабатывая все метаданные (groupId, artifactId и т. Д.) Из имена файлов. Сценарий также распечатывает xml-зависимости, которые вы можете скопировать и вставить в свой pom
.
Включите зависимости в ваш целевой пакет
Когда вы создадите свой репозиторий в проекте, вы решите проблему распределения зависимостей проекта с его источником, но с тех пор целевой артефакт вашего проекта будет зависеть от неопубликованных jar-файлов, поэтому при установке у этого хранилища будут неразрешимые зависимости.
Чтобы решить эту проблему, я предлагаю включить эти зависимости в ваш целевой пакет. Это вы можете сделать либо с плагином сборки, либо лучше с плагином OneJar . Официальную документацию по OneJar легко понять.