2009-07-23 97 views
2

有什麼方法可以強制Maven使用遠程工件,而不是使用遠程工件嗎?因爲我擔心運行時錯誤,而不是編譯錯誤生成服務器是無效的選項。如何在不使用本地安裝的工件的情況下構建

P.S.我知道我可以刪除或重命名.m2文件夾,但我敢打賭有一些更聰明的方法來做到這一點。也許一些插件或特殊命令參數?

回答

7

沒有本地存儲庫意味着你的類路徑幾乎完全由遠程服務器上的URL組成。我不明白爲什麼會支持這種方式,因爲執行會很糟糕,並且任何丟棄的連接都會導致類加載器問題。擁有本地存儲庫可確保在編譯/執行開始之前可用的罐子。

還要考慮WAR和EAR項目(以及許多使用依賴插件)依靠下載罐子來完成其包裝。如果必須從每個構建的遠程存儲庫中檢索這些數據,將會有巨大的開銷。我很確定中央的管理者不會熱衷於處理這種負載。

一些替代品,你要考慮:

  • 如果要強制每個建設廉潔本地倉庫,你可以使用依賴插件的purge目標。
  • 如果你想保持構建隔離,你可以通過傳遞-Dorg.apache.maven.global-settings =/path/to/global/settings.xml來使用單獨的Maven設置。
  • 或者,你可以覆蓋本地存儲庫在每個構建基礎通過傳遞-Dmaven.repo.local = /一些/回購/路徑
  • 如果你想避免打在每個構建遠程倉庫,加<updatePolicy>從未</updatePolicy >到遠程存儲庫的配置。這意味着Maven只會在命令行上使用「-U」開關強制執行更新時纔會檢查更新。
  • 如果要獲取最新版本的依賴關係,可以在版本聲明中使用LATEST關鍵字(而不是版本號),但如果依賴關係不兼容,這可能會有風險。
  • 如果您想採用當前版本的依賴關係,則可以在版本聲明(而不是版本號)中使用RELEASE關鍵字。這就像最新的,但往往是最新的穩定版本,而不是最新版本。
  • 如果您想在某個範圍內使用最新版本的依賴關係,請使用Maven的版本範圍表示法,例如[1.0.0,2.0.0)表示從1.0.0到2.0.0的任何版本獨家

有關最新信息和發佈的更多詳細信息,請參見section 9.3.1.3 of the Maven book

如果您使用的內部存儲庫管理器(這裏強制性NexusArtifactory引用),清除本地存儲庫的開銷大大降低 - 你會只是具有提高本地網絡流量負載。

+0

我希望找到一些插件,檢查如果我有最新版本的lib,如果我手動安裝的東西比忽略,並使用最新的回購。 – IAdapter 2009-07-23 14:17:42

0

我不認爲真的有辦法做你所要求的。您可以查看SNAPSHOT版本(但這意味着將上游項目的版本字符串更改爲SNAPSHOT版本)。

順便說一句,這是在最近Java Posse episode (#268)詳細討論。我不認爲他們最終會提出解決方案,但您可能會在那裏得到一些好的想法。

我也喜歡Rich Seller's ideas的一些,我將自己看看。

相關問題