从命令行运行具有特定路径的maven到某个插件

Posted

技术标签:

【中文标题】从命令行运行具有特定路径的maven到某个插件【英文标题】:Run maven with specific path to certain plugin from command line 【发布时间】:2017-01-27 10:04:49 【问题描述】:

我需要从命令行执行一个特定的 Maven 插件。例如,下面我执行一个特定版本的 Maven Surefire Plugin 来测试 Java 项目:

mvn org.apache.maven.plugins:maven-surefire-plugin:2.19-SNAPSHOT:test

但是,以上假设在默认的 Maven 存储库路径中找到 surefire 插件 2.19。现在,我的问题是,如果我想使用具有特定路径的插件(不是 Maven 默认路径),我应该使用命令行做什么?我希望得到类似以下的内容,而无需修改 pom.xml:

mvn /path/to/some/jar/version/org.apache.maven.plugins:maven-surefire-plugin:2.19-SNAPSHOT:test

或更一般地,用于以下调用

mvn groupId:artifactId:version:goal

我需要在某个地方指定一个自定义路径来执行其目标

mvn /some/path/to/groupId:artifactId:version:goal

另一方面,如果 Maven 甚至不支持,请告诉我。

【问题讨论】:

【参考方案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一起使用

【讨论】:

已验证。这回答了这个问题。谢谢!

以上是关于从命令行运行具有特定路径的maven到某个插件的主要内容,如果未能解决你的问题,请参考以下文章

从命令行运行 Netbeans maven 项目?

通过 Maven 前端插件或通过命令行选项从“npm install”输出调试到文件?

运行 Maven Release 时从命令行指定 Jacoco 版本

如何从命令行禁用 Maven Javadoc 插件?

为啥执行maven命令时,会首先链接远程仓库呢

新手:通过命令行进行性能分析