Построить проект maven с включенными в него библиотеками
Как создать maven pom, который сделает проект доступным для сборки, могу ли я включить проприетарные фляги в свой проект напрямую, без необходимости извлекать их из репозитория? кто-нибудь делал это раньше?
РЕДАКТИРОВАТЬ:
Я не хочу делать его работоспособным, собирая сборку с помощью jar зависимостей, я хочу, чтобы она была работоспособной. Таким образом, любой, у кого есть этот проект, может его создать, даже если в любом хранилище нигде не найдены банки.
11 ответов
1 Либо вы можете включить эту банку в вашем classpath приложения
2 вы можете установить конкретный файл JAR в вашем Maven Reopos по
mvn install:install-file -Dfile=<path-to-file> -DgroupId=<group-id> \
-DartifactId=<artifact-id> -Dversion=<version> -Dpackaging=<packaging>
Возможные решения - поместить ваши зависимости в src/main/resources, а затем в pom:
<dependency>
groupId ...
artifactId ...
version ...
<scope>system</scope>
<systemPath>${project.basedir}/src/main/resources/yourJar.jar</systemPath>
</dependency>
Примечание: системные зависимости не копируются в полученный jar / war
(см. Как включить системные зависимости в войну, построенную с использованием maven)
Создайте папку репозитория под вашим проектом. Давайте принимать
${project.basedir}/src/main/resources/repo
Затем установите свой собственный jar в этот репозиторий:
mvn install:install-file -Dfile=[FILE_PATH] \
-DgroupId=[GROUP] -DartifactId=[ARTIFACT] -Dversion=[VERS] \
-Dpackaging=jar -DlocalRepositoryPath=[REPO_DIR]
Наконец, добавьте следующие определения репозитория и зависимостей в проекты pom.xml:
<repositories>
<repository>
<id>project-repo</id>
<url>file://${project.basedir}/src/main/resources/repo</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>[GROUP]</groupId>
<artifactId>[ARTIFACT]</artifactId>
<version>[VERS]</version>
</dependency>
</dependencies>
Вы можете получить его у местного водителя, как показано ниже:
<dependency>
<groupId>sample</groupId>
<artifactId>com.sample</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/resources/yourJar.jar</systemPath>
</dependency>
Почему бы не запустить что-то вроде Nexus, вашего собственного репозитория Maven, в который вы можете загружать сторонние проприетарные файлы JAR, а также прокси-серверы других общедоступных репозиториев, чтобы сэкономить на пропускной способности?
Это также имеет несколько веских причин для запуска собственного менеджера хранилища maven.
Очень быстрый и грязный способ - указать на локальный файл:
<dependency>
<groupId>sample</groupId>
<artifactId>com.sample</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>C:\DEV\myfunnylib\yourJar.jar</systemPath>
</dependency>
Однако это будет жить только на вашей машине (очевидно), для совместного использования обычно имеет смысл использовать надлежащий архив m2 (nexus/artifactory) или если у вас нет ни одного из них или вы не хотите создавать локальный maven структурированный архив и настройте "хранилище" в вашем pom: local:
<repositories>
<repository>
<id>my-local-repo</id>
<url>file://C:/DEV//mymvnrepo</url>
</repository>
</repositories>
дистанционный пульт:
<repositories>
<repository>
<id>my-remote-repo</id>
<url>http://192.168.0.1/whatever/mavenserver/youwant/repo</url>
</repository>
</repositories>
Хороший способ добиться этого - иметь зеркальный сервер Maven, такой как Sonatype Nexus. Он бесплатный и очень простой в настройке (веб-приложение Java). С Nexus можно иметь частный (коллективный, корпоративный и т. Д.) Репозиторий с возможностью развертывания в нем сторонних и внутренних приложений, а также регистрировать другие репозитории Maven как часть того же сервера. Таким образом, локальные настройки Maven будут ссылаться только на один частный сервер Nexus, и все зависимости будут разрешены с его помощью.
Создайте новую папку, скажем local-maven-repo
в корне вашего проекта Maven.
Просто добавьте локальное репо <project>
вашей pom.xml
:
<repositories>
<repository>
<id>local-maven-repo</id>
<url>file:///${project.basedir}/local-maven-repo</url>
</repository>
</repositories>
Затем для каждого внешнего jar, который вы хотите установить, перейдите в корень вашего проекта и выполните:
mvn deploy:deploy-file -DgroupId=[GROUP] -DartifactId=[ARTIFACT] -Dversion=[VERS] -Durl=file:./local-maven-repo/ -DrepositoryId=local-maven-repo -DupdateReleaseInfo=true -Dfile=[FILE_PATH]
(Скопировано из моего ответа на похожий вопрос)
Вы можете использовать maven-assembly-plugin и создать jar со всеми включенными зависимостями.
Я думаю, что "правильное" решение заключается в добавлении ваших проприетарных библиотек в ваш собственный репозиторий. Это должно быть просто: создайте pom для своего библиотечного проекта и опубликуйте скомпилированную версию в своем хранилище. Добавьте этот репозиторий в список репозиториев для вашего почтового проекта и запустите сборку. Я верю, что это будет работать для вас.
Вы можете либо добавить jar в свой проект и поэкспериментировать с плагином maven-assembly-plugin, либо добавить jar в свой локальный репозиторий:
mvn install:install-file -Dfile=<path-to-file> -DgroupId=<group-id> -DartifactId=<artifact-id> -Dversion=<version> -Dpackaging=<packaging> -DgeneratePom=true
Where: <path-to-file> the path to the file to load
<group-id> the group that the file should be registered under
<artifact-id> the artifact name for the file
<version> the version of the file
<packaging> the packaging of the file e.g. jar