Как сделать так, чтобы тестовый jar включал зависимости в Maven?
У меня есть проект со структурой src / main / java и src / test / java, и мне удалось использовать maven-jar-plugin для создания jar тестовой ветви. Однако я хочу упаковать тестовую флягу так, чтобы все зависимости были решены. Есть ли способ, которым я могу сказать maven-jar-plugin, чтобы включить зависимости??
Спасибо!
Фрэнк
6 ответов
В аналогичной ситуации я переместил свой тестовый код в отдельный jar-файл и сделал его зависимым от исходного. Вы можете использовать агрегаторный проект, чтобы убедиться, что тесты запускаются при сборке основного фляги.
У меня была похожая проблема с интеграционными тестами, которые мне нужны для запуска на Hadoop. Наши интеграционные тесты расположены в test
папка отдельного модуля тестирования интеграции, так что требуется test-jar-with-dependencies
чтобы сделать нашу жизнь проще.
Я использую плагин сборки, как упомянуто Michael-O. Мой дескриптор сборки находится в src/main/assembly/test-jar-with-dependencies.xml
и является модификацией стандарта jar-with-dependencies
дескриптор, который является частью плагина:
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
<id>test-jar-with-dependencies</id>
<formats>
<format>jar</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<dependencySets>
<dependencySet>
<outputDirectory>/</outputDirectory>
<useProjectArtifact>true</useProjectArtifact>
<!-- we're creating the test-jar as an attachement -->
<useProjectAttachments>true</useProjectAttachments>
<unpack>true</unpack>
<scope>test</scope>
</dependencySet>
</dependencySets>
</assembly>
Эта сборка опирается на test-jar
создается как часть сборки модуля. Поэтому я добавил следующее в модуль pom.xml
:
<!-- create a complete jar for testing in other environments -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>test-jar</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptors>
<descriptor>src/main/assembly/test-jar-with-dependencies.xml</descriptor>
</descriptors>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
Вы можете сделать это: создать сборку jar с плагином сборки, распаковать зависимости, упаковать новый тестовый jar и прикрепить его к реактору. Вы сделали
Дескриптор для упаковки может выглядеть следующим образом.
<dependency>
<groupId>me.wener.xxx</groupId>
<artifactId>xxx-core</artifactId>
<version>${xxx.version}</version>
<type>test-jar</type>
<!-- <scope>test</scope> -->
</dependency>
Я использую это, чтобы включить тестовую банку. Важная строка <type>test-jar</type>
Я не уверен, что это то, что вам нужно.
3 года назад, но может помочь другим. По крайней мере, это помогло мне.:-)
Следующее сработало для Maven 3
pom.xml
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.6</version>
<executions>
<execution>
<goals>
<goal>test-jar</goal>
</goals>
<phase>test-compile</phase>
</execution>
</executions>
</plugin>
ФАЙЛ СБОРКИ
<dependencySet>
<outputDirectory>demo/test-lib</outputDirectory>
<includes>
<!--test only dependencies (like netty)-->
<include>io.netty:netty-all</include>
<!-- the actual test jar-->
<include>${project.groupId}:${project.artifactId}:test-jar</include>
</includes>
<useProjectAttachments>true</useProjectAttachments>
<scope>test</scope>
</dependencySet>
Чтобы включить зависимость test-jar в вашу сборку, укажите фильтр включения сборки debendencySet, как показано ниже:
...
<dependencySet>
<outputDirectory>/</outputDirectory>
<includes>
<include>*:jar:*</include>
<include>*:test-jar:*</include>
</includes>
</dependencySet>
...