2016-09-19 63 views
1

我需要從命令行執行特定的Maven插件。例如,在下面我執行的Maven Surefire插件的特定版本來測試Java項目:從命令行運行具有特定路徑到特定插件的maven

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

但是,上述假定找到默認的Maven倉庫路徑萬無一失插件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之內。但你可以改變這種:

  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

+0

驗證使用。這回答了這個問題。謝謝! – Bruce

相關問題