Maven: включение jar не найден в публичном репозитории
Если бы я использовал библиотеку сторонних разработчиков, которая не была в общедоступном репозитории maven, как лучше всего включить ее в зависимость от моего проекта, так что когда кто-то еще проверит мой код, он все равно сможет построить
то есть.
Мое приложение "A" зависит от jar "B", которого нет в публичном репозитории. Я, однако, хочу добавить "B" как зависимость от "A" , так что когда человек на другой стороне мира может проверить код и по-прежнему сможет построить "A"
Ответы
Ответ 1
Вы можете самостоятельно установить проект.
Или вы можете использовать область system
следующим образом:
<dependency>
<groupId>org.group.project</groupId>
<artifactId>Project</artifactId>
<version>1.0.0</version>
<scope>system</scope>
<systemPath>${basedir}/lib/project-1.0.0.jar</systemPath>
</dependency>
systemPath
требуется абсолютный путь проекта. Чтобы сделать это проще, если файл jar находится в репозитории/проекте, вы можете использовать свойство ${basedir}
, которое привязано к корню проекта.
Ответ 2
Если у вас есть родительский проект с модулем, который находится в этой ситуации (требуется зависимость не в репозитории), вы можете настроить родительский проект для использования плагина exec-maven-plugin для автоматической установки вашего зависимого файла. Например, я должен был сделать это с файлом jar authorize.net, поскольку он не является общедоступным.
Родительский POM:
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2.1</version>
<inherited>false</inherited>
<executions>
<execution>
<id>install-anet</id>
<phase>validate</phase>
<goals>
<goal>exec</goal>
</goals>
</execution>
</executions>
<configuration>
<executable>mvn</executable>
<arguments>
<argument>install:install-file</argument>
<argument>-Dfile=service/lib/anet-java-sdk-1.4.6.jar</argument>
<argument>-DgroupId=net.authorize</argument>
<argument>-DartifactId=anet-java-sdk</argument>
<argument>-Dversion=1.4.6</argument>
<argument>-Dpackaging=jar</argument>
</arguments>
</configuration>
</plugin>
</plugins>
</build>
В приведенном выше примере расположение банки находится в папке lib модуля "service".
К моменту ввода сервисного модуля в фазу проверки банку будет доступно в локальном репозитории. Просто укажите его так, как вы установили groupid, артефакт и т.д. В родительском помпе. Например:
<dependency>
<groupId>net.authorize</groupId>
<artifactId>anet-java-sdk</artifactId>
<version>1.4.6</version>
</dependency>
Ответ 3
Использование области системы может работать, но это не рекомендуется даже в спецификации Maven.
он не переносится.
из книги Maven:
system - Сфера системы аналогична предоставленной, за исключением того, что вы должны обеспечить явный путь к JAR в локальной файловой системе. Это предназначено для компиляции против собственных объектов, которые могут быть частью системных библиотек. Предполагается, что артефакт всегда быть доступным и не искать в репозитории. Если вы объявите область действия быть системой, вы также должны предоставить элемент systemPath. Обратите внимание, что эта область не рекомендуется (вы всегда должны пытаться ссылаться на зависимости в общедоступном или пользовательском Maven хранилище).
Лучшим подходом является установка в локальный репозиторий или репозиторий вашего предприятия для доступа ко всем вашим сверстникам.
Это очень просто, если вы используете диспетчер хранилища, такой как Nexus.
Ответ 4
Вообще говоря, вы должны сначала поставить стороннюю банку в свой локальный репозиторий. После этого вы можете использовать его, добавив зависимость в pom.xml.
Например.
1.Вставьте банку в свой локальный репозиторий:
mvn install:install-file -Dfile=<path-to-file>
Примечание: для этой команды требуется maven-install-plugin версии 2.5 или новее. Если нет, вы можете обратиться к здесь
2. Используйте банку, добавив зависимость в проект project pom.xml.
просто добавьте это в pom.xml вашего проекта:
<dependency>
<groupId>${the groupId in the jar pom.xml}</groupId>
<artifactId>${the artifactId in the jar pom.xml}</artifactId>
<version>${the version in the jar pom.xml}</version>
</dependency>
3. Затем вы можете упаковать или развернуть свой проект, запустив mvn package
или mvn deploy
Сторонняя банка также будет включена в пакет.
Ответ 5
Если вы используете набор инструментов groovy/grail (GGTS), вы можете напрямую импортировать эту зависимость третьей стороны (но убедитесь, что у вас есть зависимая от третьей стороны в вашем локальном репозитории), используя ниже шаги:
- Перейдите в Проводник проекта и щелкните правой кнопкой мыши по проекту.
- Выберите параметр import.
- Измените параметр maven и выберите Установить или развернуть
артефакт в репозиторий maven и нажмите далее.
- Браузер и выберите эту зависимость третьей стороны, используя Файл артефакта
и введите деталь Идентификатор группы, Идентификатор артефакта и версия.
используя файл POM.xml и нажмите завершить
Подождите некоторое время и, возможно, возникла бы ошибка в этой проблеме.