2016-08-18 115 views
2

我們artifactory的Maven倉庫只有通過HTTPS訪問,但使用自簽名證書。我們希望儘可能簡化新開發人員的工作,因此我們選擇不將證書添加到默認的Java密鑰庫。請參閱相關文件中jvm.config

相反,我做了所有我們的自簽名的證書,一個新的密鑰庫,並在/project-files/keystore.jks檢查這在我們的項目的根。我還添加了/.mvn/jvm.config,它設置了一些項目特定的jvm選項(在maven 3.3.1中介紹)。我第一次嘗試是

-Djavax.net.ssl.trustStore=/project-files/keystore.jks 
-Djavax.net.ssl.trustStorePassword=password` 

如果在根目錄運行Maven這工作正常,但如果我從它的子目錄中運行一個單獨的模塊,它無法找到信任存儲和失敗。

然後我添加了一個shell變量PROJECT_BASEDIR,我的jvm.config中的trustStore變成了-Djavax.net.ssl.trustStore=$PROJECT_BASEDIR/project-files/keystore.jks。但是,它仍然找不到信任商店。如果我使用ps來看看這個過程,結果發現變量沒有解決。我也試過-Djavax.net.ssl.trustStore=${project.parent.basedir}/project-files/keystore.jks,但那也沒用。

任何人都知道這個問題的解決方案?

+0

實際上不建議從其子目錄運行單個模塊,您仍然應該從根目錄運行它,並且只能通過運行它'mvn -pl ' –

+1

這是一個通用配置,這意味着它應該位於文件夾所在的位置用戶設置位於。簡單的解決方案可以在這裏閱讀:https://maven.apache.org/guides/mini/guide-repository-ssl.html可以通過'MAVEN_OPTS'或者通過'$ HOME/.mavenrc'來實現。 '.mvn/jvm.config'不是正確的位置,因此導致其項目特定。這是系統特定的。在這種情況下,我傾向於'.mavenrc'或Windows'$ HOME/mavenrc_pre.cmd' ...並且您在那裏設置了'MAVEN_OTPS' ... – khmarbaise

回答

0

MNG-5767功能(具體項目的默認JVM選項和命令行參數)是一個偉大的功能加入到Maven和方便的在許多情況下,但是它仍然是在其基本的水平,但它不提供先進的行爲(如果有的話)。

它對於常見和全局配置的多模塊項目非常有用,因爲它在從當前目錄構建模塊時也會啓動(因此選擇其父目錄的.mvn/jvm.config),但它有一些限制(根據我的最新的測試版本的Maven 3.3.9 ,在寫作的時候):

  • 不能覆蓋在模塊級值額外.mvn/jvm.config,它們將被忽略
  • 你可以」沒有相對路徑,並期望在模塊目錄構建中正常工作,因爲它也會而從層樓高的目錄模塊(再次,因此拿起父.mvn/jvm.config)一起使用,因此突破相對路徑分辨率
  • 你不能有行家性佔位符,因爲他們不會被替換(在Maven構建階段太早執行它)

在這種情況下,實際上一般的建議是,建立使用reactor options,並通過項目名單(-pl)模塊名指定從根/父文件夾的模塊。

mvn -pl <module-name> 

這樣做時,相對路徑不應該被打破,也將採取多模塊生成行爲的優勢,爲單一的構建,例如局部分辨模塊間的依賴關係通過源代碼(因爲從根pom.xml文件的Maven的已知,如果在一定的依賴性是一個模塊或不)並且通過不依賴行家(因爲直接建立一個模塊時,Maven的沒有其它模塊的知識並試圖解決像任何其他依賴關係一樣的模塊間依賴關係,查看本地緩存和存儲庫,並且可能不會獲取最新代碼)。

+0

'.mvn/jvm.config'在運行mvn腳本。此時命令行未被解析,因爲Maven根本沒有啓動過。您知道定義JVM選項並啓動JVM並覆蓋選項需要重新啓動JVM,因爲一般情況下,對於啓動的JVM,選項無法被覆蓋。此外,在閱讀'.mvn/jvm.config'時Maven尚未啓動,因此沒有構建階段正在運行?也許你可以提供更多關於你認爲可能有用的細節?或者最好是在用戶/開發人員名單上更好地討論這個問題? – khmarbaise

+0

@khmarbaise「如果有需要」實際上指出了這一點,那可能是功能已經完成,並且不需要額外的行爲。我知道(猜測)它是如何工作的,這就是爲什麼我的答案解釋了這個用例或其他潛在用例的不可能性。感謝您的確認。 –