0

我們對Maven比較新,現在面臨一個問題。部署具有多個配置文件依賴項的maven工件

我們有一個Maven項目(了projectA),其JAR是其他幾個項目的依賴。其他一些項目是一些自定義Web容器,而其他項目則不是,因此在自定義Web容器的情況下提供了一些projectA的依賴項jar,但在其他項目中應該是運行時範圍。在自定義Web容器的情況下,我們目前使用排除列表過濾掉提供的jar。

我們知道這將是更好的使用Maven的配置文件。我們知道如何創建具有不同依賴關係的配置文件(實際上具有相同的依賴關係不同範圍),並且在兩個配置文件中,構建的projectA jar都是按位進行相同的。但是我們不知道的是,當我們將projectA jar工件部署/發佈到Maven倉庫時,pom.xml應該是什麼樣子?對於這些Web容器項目,pom.xml不應包含提供的jar包,但對於其他項目,pom.xml應包含這些jar包。

我們可以使用不同的名稱爲每個配置文件中的jar和部署每一個不同的pom.xml,但由於這些罐子是相同的逐位,它似乎並不像一個完美的解決方案。所以我們認爲這個問題應該有更好的解決方案,只是我們不知道,因爲我們對Maven來說是比較新的。謝謝。

回答

0

的POM是POM。您似乎在討論如何管理引用「A」的其他項目中的傳遞依賴項。您在Maven中的選項相當有限:

  • 您可以使用排除來移除不需要的傳遞依賴關係。
  • 您可以按照「規定」中的「A」聲明依賴,但如果罐子其實是A的目標環境中提供這僅僅是真正正確的。它主要用於Java EE api依賴項,如servlet-api,它們由容器提供並禁止包含在WAR文件中。
  • 你可以聲明依賴作爲可選的,這就是人們通常是指當他們說「提供」,並手動包括在需要它們的地方的地方這些依賴。

我個人會選擇「可選」路由,因爲它是每個項目的工作,以拉入它所需的依賴關係,並且如果使用「A」時可選項是可選的,則它意味着使用「A 「必須明確地選擇他們是否會使用它的可選部分。當構建具有多個不同用例的工件時,這往往是最合適的。

有關此方面的其他幫助,您還可以使用maven enforcer plugin來禁止構建某些依賴關係,以免意外得到不需要的罐子。

相關問題