Построить проект 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
Другие вопросы по тегам