我需要从命令行执行特定的Maven插件。例如,在下面我执行特定版本的Maven Surefire插件来测试Java项目:
replayHandler
但是,上面假设在默认的Maven存储库路径中找到surefire插件2.19。现在,我的问题是,如果我想使用具有特定路径的插件(不是Maven默认路径),我应该使用命令行做什么?我希望如下所示,而无需修改mvn org.apache.maven.plugins:maven-surefire-plugin:2.19-SNAPSHOT:test
:
pom.xml
或更一般地,对于以下调用
mvn /path/to/some/jar/version/org.apache.maven.plugins:maven-surefire-plugin:2.19-SNAPSHOT:test
我需要某处指定一个自定义路径来执行其目标
mvn groupId:artifactId:version:goal
另一方面,如果Maven甚至不支持,请告诉我。
答案 0 :(得分:1)
这不是它的工作原理。 Maven将始终在本地存储库中查找工件。如果它无法在您的本地存储库中找到它,它将尝试从配置的远程存储库下载它。
因此,您没有指定插件的路径。您指定安装该插件的本地存储库的路径。在这个本地存储库中将安装您尝试调用的插件的所有依赖项。这也意味着你无法在任何地方“坐在”插件中使用JAR;它需要位于正确的存储库树目录中。使用/my/local/repo
的本地存储库,插件groupId:artifactId:version
的工件必须位于/my/local/repo/groupId/artifactId/version
中并命名为artifactId-version.jar
(和.pom
)。同样地说,该插件的依赖项的位置必须遵循该目录结构。
默认情况下,本地存储库位于~/.m2/repository
内。但你可以通过以下方式改变它:
maven.repo.local
系统属性,例如mvn -Dmaven.repo.local=/path/to/local/repo groupId:artifactId:version:goal
; 使用自定义settings.xml
并告诉Maven使用它with the -s
command line option。它将包含:
<settings>
<localRepository>/path/to/local/repo</localRepository>
</settings>
并与mvn -s /path/to/settings.xml groupId:artifactId:version:goal