【问题标题】:How to specify JAR location of a Maven dependency as plugin parameter?如何将 Maven 依赖项的 JAR 位置指定为插件参数?
【发布时间】:2016-01-28 15:09:39
【问题描述】:

我尝试按照this response on SO 的配置将本地仓库中的 jar 位置用作插件参数,但它似乎不起作用。我不知道这是否是由于 Maven 版本比响应更新(我使用的是 Maven 3.2.5)。

在我的 pom.xml 中,我需要将 javaagent 添加到我的surefire 插件定义中。 javaagent jar 文件是我项目中的一个依赖项。

我尝试了以下方法:

<dependencies>
        <dependency>
            <groupId>org.jmockit</groupId>
            <artifactId>jmockit</artifactId>
            <version>${jmockit.version}</version>
            <scope>test</scope>
        </dependency>
</dependencies>

...
        <!-- Configuration to use jmockit on IBM J9 -->
        <plugin>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
                <argLine>-javaagent:${org.jmockit:jmockit:jar}</argLine>
            </configuration>
        </plugin>

我原以为 ${org.jmockit:jmockit:jar} 会扩展到 jar 的位置,但在我的 mvn 控制台中,我看到以下错误:

[ERROR] Command wascmd.exe /X /C "C:\IBM\SDP\jdk\jre\bin\java -javaagent:${org.jmockit:jmockit:jar} -jar C:\dev\Eclipse\rtc-connector\target\surefire\surefirebooter1389906134960134.jar C:\dev\Eclipse\rtc-connector\target\surefire\surefire5488684370604495471tmp C:\dev\Eclipse\rtc-connector\target\surefire\surefire_05402037720997438783tmp"

所以显然参数没有得到扩展。我希望/期待看到类似-javaagent:c:\users\eric\.m2\repository\org.jmockit\1.20\jmockit-1.20.jar 或类似的东西。

有没有一种干净的方法可以在我的插件配置中从我的依赖项中引用 jar?我知道我可以使用依赖插件将 jar 复制到目标文件夹中的已知位置,然后指向该位置,但我希望有一个更简单的解决方案,不需要中间步骤。

【问题讨论】:

    标签: java maven maven-surefire-plugin


    【解决方案1】:

    要进行变量扩展需要添加ma​​ven-dependency-plugin

            <!-- obtain ${*:*:jar} properties -->
            <plugin>
                <artifactId>maven-dependency-plugin</artifactId>
                <executions>
                    <execution>
                        <id>getClasspathFilenames</id>
                        <goals>
                            <goal>properties</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
    
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <argLine>-javaagent:${org.jmockit:jmockit:jar}</argLine>
                </configuration>
            </plugin>
    

    【讨论】:

      【解决方案2】:

      您需要设置“argLine”标签值如下:

                  <plugin>
                      <groupId>org.apache.maven.plugins</groupId>
                      <artifactId>maven-surefire-plugin</artifactId>
                      <version>${surefire.version}</version>
                      <configuration>
                          <argLine> 
      -javaagent:"${localRepository}/org/jmockit/jmockit/${jmockit.version}/jmockit-${jmockit.version}.jar"
                          </argLine>
                      </configuration>
                  </plugin>
      

      您需要设置 jmockit jar 所在的 .m2 存储库路径。它对我有用。

      【讨论】:

        【解决方案3】:

        maven-dependency-plugin 包含一个可以解决此问题的目标 build-classpath

        在命令行你可以做这样的事情:

        mvn dependency:build-classpath -DincludeArtifactIds=testng -DincludeGroupIds=testng
        

        导致:

        C:\repository\org\testng\testng\6.8.21\testng-6.8.21.jar
        

        生成的类路径也可以放入属性outputProperty .... 这也可以配置成 pom...

        【讨论】:

          猜你喜欢
          • 2013-09-02
          • 2016-03-05
          • 1970-01-01
          • 2015-05-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-07-19
          • 1970-01-01
          相关资源
          最近更新 更多