Search code examples
javascalamavenbuildtestcase

Add scala test-case to jar file in maven project


I want to include scala test case to the jar file. I have maven project. I have used following :

<assembly>
<id></id>
<formats>
    <format></format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>

<dependencySets>
    <dependencySet>
        <includes>
           <include>...</include>
        </includes>
    </dependencySet>
    <dependencySet>
        <outputDirectory></outputDirectory>
    </dependencySet>
</dependencySets>
<fileSets>
    <fileSet>
        <directory>${project.build.directory}/test/scala</directory>
        <outputDirectory>/</outputDirectory>
        <includes>
            <include>**/*.class</include>
        </includes>
        <useDefaultExcludes>true</useDefaultExcludes>
    </fileSet>
</fileSets>

Can anybody tell me what is the way to add scala testcase into jar file using

mvn clean package

Thanks.


Solution

  • You need to create a fat jar with test-classes and external dependencies. The Maven Assembly Plugin is the obvious choice:

    Plugin example:

    <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
            <version>2.3</version>
                <configuration>
                    <descriptor>src/main/assembly/assembly.xml</descriptor>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                        <configuration>
                            <archive>
                                <manifest>
                                    <mainClass>com.example.MainTest</mainClass>
                                </manifest>
                            </archive>
                        </configuration>
                        </execution>
                </executions>
    </plugin>
    

    You also need to create a descriptor file, in the src\main\assembly folder an assembly.xml file with the following content:

    An example:

    <assembly
        xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd">
        <id>fat-tests</id>
        <formats>
            <format>jar</format>
        </formats>
        <includeBaseDirectory>false</includeBaseDirectory>
        <dependencySets>
            <dependencySet>
                <outputDirectory>/</outputDirectory>
                <useProjectArtifact>true</useProjectArtifact>
                <unpack>true</unpack>
                <scope>test</scope>
            </dependencySet>
        </dependencySets>
        <fileSets>
            <fileSet>
                <directory>${project.build.directory}/test-classes</directory>
                <outputDirectory>/</outputDirectory>
                <includes>
                    <include>**/*.class</include>
                </includes>
                <useDefaultExcludes>true</useDefaultExcludes>
            </fileSet>
        </fileSets>
    </assembly>
    

    Build Jar:

    mvn clean compile test-compile assembly:single
    

    Run Jar:

    java -jar fat-jar-include-tests.jar