Search code examples
mavenmaven-3maven-surefire-plugin

How to configure maven surefire to use an jvm agent that is a dependency?


I would like to configure the maven sure fire plugin to start the unit testing jvm with the argument for a java agent. The agent jar file is being obtained from maven central so I want maven to automatically figure out the path to the agent's jar file.

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.12.4</version>
    <configuration>
        <argLine>-javaagent: How to reference an agent jar that is a depedency </argLine>
    </configuration>
</plugin>

How can I refer to the path to the agent which is a dependency of the project using maven co-ordinates?


Solution

  • You can copy one of your needed jars to a target destination. Then refer to that jar on your command line.

    Here is an example (using log4j which is NOT a valid agent jar but just to show an example):

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <version>2.5.1</version>
        <executions>
            <execution>
                <id>copy-agent</id>
                <phase>process-test-classes</phase>
                <goals>
                    <goal>copy</goal>
                </goals>
                <configuration>
                    <artifactItems>
                        <artifactItem>
                            <groupId>log4j</groupId>
                            <artifactId>log4j</artifactId>
                            <version>1.2.14</version>
                            <outputDirectory>${project.build.directory}/agents</outputDirectory>
                            <destFileName>my-special-agent.jar</destFileName>
                        </artifactItem>
                    </artifactItems>
                </configuration>
            </execution>
        </executions>
    </plugin>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.12.4</version>
        <configuration>
            <argLine>-javaagent:${project.build.directory}/agents/my-special-agent.jar</argLine>
        </configuration>
    </plugin>