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

3

13

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?

Perfume answered 7/11, 2012 at 7:4 Comment(0)
G
11

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>
Growl answered 7/11, 2012 at 7:50 Comment(0)
C
7

@wozza-xing gives a far superior solution to copying the jar around. Complete XML snippet:

 <plugin>
    <artifactId>maven-dependency-plugin</artifactId>
    <executions>
      <execution>
        <goals>
          <goal>properties</goal>
        </goals>
      </execution>
    </executions>
  </plugin>
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <configuration>
      <argLine>-javaagent:${net.bytebuddy:byte-buddy-agent:jar}</argLine>
    </configuration>
  </plugin>
Cahan answered 5/6, 2018 at 16:12 Comment(3)
To be highlighted: Without the maven-dependency-plugin, the replacement into variables does not work.Polarize
@Polarize how is this supposed to work, since the goal only creates properties for the project dependencies, not the plugin dependencies. Now I must make bytebuddy a dependency on my project?Sincere
Well, if you want to use byte-buddy then you must make it a dependency. But I must admit I don't get why you want to add plugin dependencies as agents. Doesn't make sense for me.Polarize
A
6

Use

The properties mojo of the dependency plugin.

<argLine>-javaagent:${org.springframework:spring-instrument:jar}</argLine>
Ainslee answered 28/6, 2016 at 1:52 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.