Guide to using attached tests

You can reuse the tests that you have created for one project in another. For example, suppose foo-core contains test code in the ${project.basedir}/src/test/java. To package up those compiled tests in a JAR and deploy them for general reuse, configure the maven-jar-plugin as follows:

<project>
  <build>
    <plugins>
     <plugin>
       <groupId>org.apache.maven.plugins</groupId>
       <artifactId>maven-jar-plugin</artifactId>
       <version>3.0.2</version>
       <executions>
         <execution>
           <goals>
             <goal>test-jar</goal>
           </goals>
         </execution>
       </executions>
     </plugin>
    </plugins>
  </build>
</project>

The attached test JAR can be installed and deployed like any other Maven artifact.

To use the attached test JAR, specify a dependency on the main artifact with a specified type of test-jar and the classifier.

<project>
  ...
  <dependencies>
    <dependency>
      <groupId>com.myco.app</groupId>
      <artifactId>foo-core</artifactId>
      <version>1.0-SNAPSHOT</version>
      <classifier>tests</classifier>
      <type>test-jar</type>
      <scope>test</scope>
    </dependency>

    <dependency>
      <!--
        only needed if the test provider is not correctly autodetected by surefire
        ... and you are using junit-jupiter (othewise, replace with your test framework)
      -->
      <groupId>org.junit.jupiter</groupId>
      <artifactId>junit-jupiter</artifactId>
      <version>${junit.jupiter.version}</version> <!-- remember to set version as needed -->
      <scope>test</scope>
    </dependency>
  </dependencies>
  ...
  <build>
    <plugins>
      ...
      <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>${surefire.version}</version> <!-- remember to set version as needed -->
          <configuration>
              <dependenciesToScan>
                  <dependency>com.myco.app:foo-core:test-jar:tests</dependency>
              </dependenciesToScan>
          </configuration>
      </plugin>
      ...
    </plugins>
   </build>
   ...
</project>