How to include test classes in Jar created by maven-shade-plugin?

dependencies, java, maven, maven-jar-plugin, maven-shade-plugin

Solution

I've solved my problem a different way; using two other plugins.

First I use the `maven-dependency-plugin` to get the dependencies and unpack them locally, then I use the `maven-jar-plugin` to create a `test-jar` and include the classes from the unpacked dependencies.

Problem

I'm trying to package my test classes in to an executable jar with dependencies using Maven, but I'm struggling to get this right. This is my pom.xml so far: ``` <project> <modelVersion>4.0.0</modelVersion> <groupId>com.c0deattack</groupId> <artifactId>executable-tests</artifactId> <version>1.0</version> <packaging>jar</packaging> <name>executable-tests</name> <dependencies> <dependency> <groupId>info.cukes</groupId> <artifactId>cucumber-java</artifactId> <version>1.0.0</version> </dependency> <dependency> <groupId>info.cukes</groupId> <artifactId>cucumber-junit</artifactId> <version>1.0.0</version> </dependency> <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <version>2.21.0</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.10</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>2.4</version> <executions> <execution> <goals> <goal>test-jar</goal> </goals> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>1.6</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <finalName>cucumber-tests</finalName> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <mainClass>cucumber.cli.Main</mainClass> </transformer> </transformers> <artifactSet> <includes> <include>info.cukes:*</include> </includes> </artifactSet> </configuration> </execution> </executions> <dependencies> <dependency> <groupId>com.c0deattack</groupId> <artifactId>executable-tests</artifactId> <version>1.0</version> <type>test-jar</type> </dependency> </dependencies> </plugin> </plugins> </build> </project> ``` When I execute `mvn clean package` the build creates 3 jars: - executable-tests-1.0.jar // built by the mvn package phase - executable-tests-1.0-teststjar // built by the jar-plugin - cucumber-tests.jar // build by the shade-plugin `Cucumber-tests.jar` contains the `info.cuke` dependencies but it doesn't contain the `executable-tests-1.0-tests.jar`. I've done all sorts of things to try and have the test classes included but nothing has worked, what am I missing? Edit: I've pushed my example project to GitHub if any one fancies playing around with it :) https://github.com/C0deAttack/ExecutableTests

Original source

Related problems