【问题标题】:Maven test and -Javaagent argumentMaven 测试和 -Javaagent 参数
【发布时间】:2017-09-19 14:07:11
【问题描述】:

我有一个简单的 java 项目,在具有当前架构的 Junit 测试用例上:

pom.xml
src/main/java/com/Example.Java
src/test/java/com/ExampleTest.java

pom.xml的内容如下:

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
     <modelVersion>4.0.0</modelVersion>
     <groupId>com</groupId>
     <artifactId>SampleExample</artifactId>
     <packaging>jar</packaging>
  <version>1.0</version>
  <build>
    <plugins>
      <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>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.1</version>
        <configuration>
          <source>1.7</source>
          <target>1.7</target>
        </configuration>
      </plugin>
    </plugins>
  </build>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
    </dependency>
  </dependencies>
</project>

要执行测试,我只需从 bash 调用 mvn test。正如预期的那样,这将运行测试。现在回答我的问题:

在 maven 之外指定 javagent 只需通过 -javaagent 选项的特异性来完成。如何在 maven 框架中执行此操作,以便在执行 mvn test 时加载我指定的代理? (即我如何添加自定义参数,当测试执行时,maven 将传递给“java”命令)

【问题讨论】:

    标签: java maven javaagents


    【解决方案1】:

    在你的 POM 中定义 Surefire 插件,并通过 Surefire 的配置传递 JVM arg。

    例如:

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.20.1</version>
        <configuration>
            <argLine>-javaagent:/path/to/javaagent</argLine>
        </configuration>
    </plugin>
    

    对于背景:test 目标默认绑定到 surefire:test(有关默认绑定 here 的更多详细信息),因此您可能已经在运行 Surefire 插件,但可能没有意识到。现在唯一的变化是您需要更改 Surefire 插件的配置,这要求您按照我上面显示的示例将其显式包含在您的 POM 中。如果不使用 Surefire 插件,您将无法运行 test 目标,并且您无法在不配置 Surefire 插件的情况下告诉 Surefire 使用 JVM arg。

    【讨论】:

    • 万能插件到底是什么?它与 mvn 测试有什么关系?这可以在没有这个插件的情况下完成吗?谢谢!
    • @SFD 我已经更新了答案,包括说明您一直在使用 Surefire :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-07
    • 1970-01-01
    • 1970-01-01
    • 2013-03-08
    • 1970-01-01
    • 2014-11-21
    相关资源
    最近更新 更多