从命令行运行具有特定路径的特定路径的maven

时间:2016-09-19 16:29:25

标签: java maven plugins

我需要从命令行执行特定的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甚至不支持,请告诉我。

1 个答案:

答案 0 :(得分:1)

这不是它的工作原理。 Maven将始终在本地存储库中查找工件。如果它无法在您的本地存储库中找到它,它将尝试从配置的远程存储库下载它。

因此,您没有指定插件的路径。您指定安装该插件的本地存储库的路径。在这个本地存储库中将安装您尝试调用的插件的所有依赖项。这也意味着你无法在任何地方“坐在”插件中使用JAR;它需要位于正确的存储库树目录中。使用/my/local/repo的本地存储库,插件groupId:artifactId:version的工件必须位于/my/local/repo/groupId/artifactId/version中并命名为artifactId-version.jar(和.pom)。同样地说,该插件的依赖项的位置必须遵循该目录结构。

默认情况下,本地存储库位于~/.m2/repository内。但你可以通过以下方式改变它:

  1. 在命令行中指定maven.repo.local系统属性,例如mvn -Dmaven.repo.local=/path/to/local/repo groupId:artifactId:version:goal;
  2. 使用自定义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

  3. 一起使用