当前位置: 首页 > 知识库问答 >
问题:

如何将Maven依赖项的JAR位置指定为插件参数?

沈子实
2023-03-14

我尝试按照此响应中的配置来使用本地repo中的jar位置作为插件参数,但似乎不起作用。我不知道这是否是因为Maven版本比响应版本更新(我使用的是Maven 3.2.5)。

在我的pom.xml,我需要在我的surefire插件定义中添加一个javaagent。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 \存储库\组织。jmockit\1.20\jmockit-1.20。jar或类似的东西。

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

共有3个答案

宗政卓
2023-03-14

maven依赖插件包含一个目标构建类路径,可以解决这个问题。

在命令行中,您可以执行以下操作:

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

其结果是:

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

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

洪祺
2023-03-14

您需要按如下方式设置“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 repo路径。这对我有用。

邵骁
2023-03-14

要进行变量扩展,需要添加maven-依赖-插件:

        <!-- 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>
 类似资料:
  • 我正在开发一个Java项目,使用maven作为依赖项管理器/构建工具。我当前在将依赖项的依赖项解析到正确版本时遇到问题。 有问题的依赖项称为JasperReports-Functions-6.1.0.jar,它不是托管在maven repo中,而是以jar形式提供的。 如何强制jar依赖项使用子依赖项的某个版本?

  • 最近,我发现了以下问题: 当我为我的项目设置依赖项管理时,我有一个child-pom,它使用具有依赖项的插件,我想要与在我的依赖项管理中声明的依赖项同步。 在根pom中,我在依赖项管理中声明: 在子pom中,我有一个插件需要gwt-user: 但是,如果我移除gwt-maven-plugin中使用的依赖版本,编译就会失败。 是不是还有别的办法可以实现呢? PS:在maven和maven插件中有一个

  • 我正在使用maven shade插件创建一个胖罐子,其中也包括一些弹性城堡罐子。但这造成了问题,因为Bouncy Castle的未签名版本。

  • 我有一个Maven BOM文件,我将其导入到我的项目pom中: 适用于依赖项,甚至插件。但现在我还想控制pom项目中使用的插件的依赖性版本: 我想在BOM文件中指定Commons-dbcp的版本,而不必将其指定为BOM文件中jetty插件的依赖项。

  • 我有一个gradle构建,它依赖于一个在buildSrc目录中编译的插件(MyTools)。这部分工作正常。我遇到的问题是试图从外部jar导入一个类以在myTools插件的源代码中使用。 我的目录结构如下: buildsrc ----build.gradle -----build.gradle -----settings.gradle -------libs -------Yuicompresso

  • 我有两个依赖项,工件-a和工件-b。每个依赖于不同版本的工件-c。我如何对工件进行阴影以使用这些不同的依赖项?(或者让工件-a使用阴影依赖项,工件-b使用普通依赖项。