Maven - добавить jar-with-dependencies в качестве зависимости
Вопрос..
Я хотел бы добавить зависимость от флага Maven, упакованного с его зависимостями.
Подробнее..
У меня есть мультимодульный проект Maven, в котором один из модулей зависит от собственных библиотек и тому подобного. Как часть сборки, он упаковывает свои зависимости в jar-with-dependencies
, как показано ниже:
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.4</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>${mainClass}</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
Все хорошо, я получаю две банки при создании:
seaniscool-0.0.1-SNAPSHOT.jar
seaniscool-0.0.1-SNAPSHOT-jar-with-dependencies.jar
Однако я хотел бы использовать этот артефакт в другом модуле того же проекта. Если я просто добавлю модуль в качестве зависимости, я получаю банку без встроенных библиотек.
Я мог бы дублировать конфигурацию сборки, чтобы включить собственные библиотеки во 2-й модуль, также не очень обширный, но предпочел бы не делать этого.
Любые идеи о том, как я могу добавить jar-with-dependencies
в качестве зависимости и, следовательно, зависеть от включенных библиотек?
Некоторые мысли..
Я знаю, что могу создать отдельную банку с тестовыми классами, которые Maven может ссылаться:
В первом модуле:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.2</version>
<executions>
<execution>
<goals>
<goal>test-jar</goal>
</goals>
</execution>
</executions>
</plugin>
В 2-м модуле:
<dependency>
<groupId>my.group.id</groupId>
<artifactId>my.artifact.id</artifactId>
<version>my.version</version>
<type>test-jar</type>
<scope>test</scope>
</dependency>
Возможно, эта концепция может переместиться?
Ответы
Ответ 1
Вы можете сделать это с помощью классификатора maven. Classfiers используются, поэтому модуль maven может создавать несколько артефактов из одного источника. Примерами являются версия jdk1.6 или 1.7 или даже исходная и javadoc jars maven могут создавать.
Итак, попробуйте следующее:
<dependency>
<groupId>yourID</groupId>
<artifactId>seaniscool</artifactId>
<version>0.0.1-SNAPSHOT</version>
<classifier>jar-with-dependencies</classifier>
</dependency>
Если вы хотите переименовать classfier в более качественное имя, например, сNative или полным, или что-нибудь еще, посмотрите плагин maven shade, который также может создавать банки с зависимостями но позволяет еще немного контролировать.
Ответ 2
Просто обратите внимание на ответ @msczalbach
Собственно, даже с standarad maven-jar-plugin вы можете дать какой-либо суффикс для сгенерированной банки. Просто используйте конфигурацию.
например:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
<configuration>
<descriptorRefs>
<descriptorRef>self-contained</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>