Как сделать так, чтобы тестовый 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>
...
Другие вопросы по тегам