How can I make the test jar include dependencies in Maven?

后端 未结 6 1768
广开言路
广开言路 2020-12-28 20:05

I have a project with src/main/java and src/test/java structure, and I managed to use maven-jar-plugin to build a jar of the test branch. However, I want to package the test

相关标签:
6条回答
  • 2020-12-28 20:06

    The following worked for 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>
    

    ASSEMBLY FILE

    <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>
    
    0 讨论(0)
  • 2020-12-28 20:08

    In a similar situation I ended up moving my test code to a separate jar and made it depend on the original one. You can use an aggregator project to ensure that tests are run when you build the main jar.

    0 讨论(0)
  • 2020-12-28 20:13

    I had a similar problem with integration tests I need to run on Hadoop. Our integration tests are located in the test folder of a separate integration test module, so what is required is a test-jar-with-dependencies to make our life easier.

    I'm using the assembly plugin as mentioned by Michael-O. My assembly descriptor is located in src/main/assembly/test-jar-with-dependencies.xml and is a modification of the standard jar-with-dependencies descriptor that's part of the plugin:

    <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>
    

    This assembly relies on the test-jar being created as part of the module build. So I added the following to the module's 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>
    
    0 讨论(0)
  • 2020-12-28 20:25

    to include a test-jar dependency in your assembly specify the include filter of the assembly debendencySet as bellow:

    ...
    <dependencySet>
        <outputDirectory>/</outputDirectory>
        <includes>
            <include>*:jar:*</include>
            <include>*:test-jar:*</include>
        </includes>
    </dependencySet>
    ...
    
    0 讨论(0)
  • 2020-12-28 20:27

    You can do this: Create a jar assembly with the assembly plugin, have the dependencies unpacked, pack a new test jar and attach it to the reactor. You're done.

    The descriptor for the packaging could look like this.

    0 讨论(0)
  • 2020-12-28 20:27
        <dependency>
            <groupId>me.wener.xxx</groupId>
            <artifactId>xxx-core</artifactId>
            <version>${xxx.version}</version>
            <type>test-jar</type>
            <!-- <scope>test</scope> -->
        </dependency>
    

    I use this to include the test jar.the important line is <type>test-jar</type>.I am not sure this is what you need.

    3 years ago, but may help others.At least, it helped me. :-)

    0 讨论(0)
提交回复
热议问题