Проблеми народних підходів
Більшість відповідей, які ви знайдете в Інтернеті, запропонують вам встановити залежність у вашому локальному сховищі або вказати "системний" обсяг у pom
та розподілити залежність із джерелом вашого проекту. Але обидва ці рішення насправді є хибними.
Чому не слід застосовувати підхід "Встановити до локальної репо"
Коли ви встановлюєте залежність до свого локального сховища, він залишається там. Ваш артефакт розповсюдження буде добре, доки він матиме доступ до цього сховища. Проблема полягає в тому, що в більшості випадків це сховище буде знаходитися на вашій локальній машині, тому не можна буде вирішити цю залежність від будь-якої іншої машини. Очевидно, що ваш артефакт залежить від конкретної машини - це не спосіб вирішити справи. Інакше цю залежність доведеться встановлювати локально на кожній машині, що працює з тим проектом, що не є кращим.
Чому не слід застосовувати підхід "Система"
Банки, від яких залежать підходи до системи "Обсяг системи", не встановлюються в будь-яке сховище або додаються до ваших цільових пакетів. Ось чому ваш розповсюджувальний пакет не матиме способу вирішити цю залежність при використанні. На мою думку, це було причиною того, що використання сфери застосування системи навіть застаріло. У будь-якому випадку ви не хочете покладатися на застарілу функцію.
Статичне рішення в сховищі проекту
Після цього введіть це 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, щоб встановити ваші банки як артефакти. Отже, щоб встановити артефакт до сховища проекту, під repo
папкою Execute:
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 набридає і, безумовно, схильна до помилок, я створив скрипт утиліти, який автоматично встановлює всі банки з lib
папки в сховище проекту, при цьому автоматично розв’язуючи всі метадані (groupId, artifactId тощо) з назви файлів. Сценарій також роздруковує залежності xml для копіювання та вставки у свій файл pom
.
Включіть залежності у свій цільовий пакет
Коли у вас буде створено сховище проекту, ви вирішили проблему розподілу залежностей проекту з його джерелом, але відтоді цільовий артефакт вашого проекту буде залежати від неопублікованих банок, тож коли ви встановите це до сховища він матиме нерозв'язні залежності.
Для подолання цієї проблеми я пропоную включити ці залежності у свій цільовий пакет. Це ви можете зробити з плагіном зборки або краще з плагіном OneJar . Офіційний документальний фільм на OneJar легко зрозуміти.