2013-05-10 25 views
2

我是新來的java。當我查看jar文件時,我看到文件名中包含版本的混合,而不是。什麼時候jar文件名應該有一個版本號?這有什麼優點和缺點?

  • 在什麼情況下這些都是一個好主意?
  • 將版本號放入jar文件名有什麼優點和缺點?
  • 如果一個版本是一個jar文件名,客戶端jar是否需要重新編譯才能使用它?

我環顧四周找到了這方面的信息,但我主要是找到說明方向,而不是深思熟慮的解釋。 This link有點幫助,但thesetwo所以問題不是真的。

+0

@rgettman,是一個更爲具體的解釋,爲什麼一個問題關閉了太多問?這是一個在其他地方不容易回答的問題,而且對我來說似乎並不主觀。我覺得我證明了我在別處研究過這個問題?我對其他幾個無用的SO問題(你是否應該版本化?是的,無論是什麼問題)並不滿意,並且想知道什麼樣的力量會促成任何選擇。是stackoverflow錯誤的地方去得到一個技術問題的詳細答案?期待關於問題結束的反饋意見是不合理的嗎? – tallseth 2013-05-13 12:56:38

+0

FWIW我認爲這是一個完全合理的問題。 Egomaniacs在沒有給出理由的情況下關閉問題根本沒有幫助。 – ksl 2015-12-08 14:55:32

回答

3
  1. 版本控制的JAR文件是一個好主意
  2. 版本是立即可見&,你可以很容易地發現衝突。我看不到任何實質性的* con。
  3. 不,只有在兩個或多個jar文件**中存在衝突的類文件時,jar文件的名稱纔有意義。

*:例如,insignificat缺點,比如可執行罐子可能是不容易的版本號是鍵入

**: 例如,如果你有類com.foo.Bar在兩個jar-文件​​,類加載器將加載任意一個,通常取決於哪個先找到。如果您有兩個版本的相同jar文件,則同樣適用 - 您通常不知道將使用哪個版本。

+0

你能詳細說說3嗎? – 2013-05-10 12:24:26

+0

如果您將這些罐子保存在一個文件夾中,並且在IDE中手動更新對這些罐子的引用,那麼最終的版本可能會超過您的同事。所以,我建議使用maven。 (而不是替換文件「mylib.jar」,你可能會不小心添加一個(「mylib-1.0.jar」和「mylib-1.1.jar」), ) 同樣,如果你正在使用maven或其他項目管理工具,它不應該是一個問題 – Igor 2013-05-10 12:38:05

+0

我很困惑如果我有兩個版本的「相同」的jar可用(但由於版本不同的文件名)使用的是**任意的**?這似乎很可怕 – tallseth 2013-05-10 13:17:13

1

當然,好主意,使用Maven http://maven.apache.org/,它會自動建立與版本罐子,沒有缺點優點只有

+0

這聽起來不錯,但我更感興趣的是爲什麼要選擇一個約定而不是另外的,而不是規定性的建議去做x或y。 – tallseth 2013-05-10 13:18:37

4

您正在尋找主觀意見....我對此有主觀意見。我維護JDOM項目。我們有許多罐子,在項目的早期階段,我們有無版本的罐子名稱。現在我們有一個版本化的jar名稱。

我們切換的原因是:

  • 這是很容易看到罐子你的版本在classpath(使調試和溝通更加容易)
  • 這是很容易讓用戶的什麼版本他們(品牌錯誤報告更容易)
  • 就容易多罐儲存在一個單獨的目錄(使管理更輕鬆)
  • 許多「庫」資源系統(如Maven的)需要在罐子裏的版本號

的原因,我已經聽到了有versionless罐子(但我不同意)

  • 短類路徑 - 太多的類可以溢出命令行的長度。這是一個BS的論點,並且有很多Jars會遇到同樣的問題。可以使用特殊Jar中的清單文件解決。不是版本化的jar的錯。
  • 容易丟棄在新的jar版本中(覆蓋舊的jar) - 好吧,沒有什麼能阻止你自己重新命名jar,或者更新你的構建系統來引用新的jar版本。事實上,如果你定義了你的jar版本號,你可以更好地控制你的構建過程。

我沒有理由在沒有理由的情況下強調無版本jar是合適的。

1

我意識到的唯一問題是當您構建在工作站上執行或作爲腳本的一部分執行的jar文件時。

你可以通過在你的jar文件中包含一個腳本文件來解決這個問題。

下面是一個Windows示例:

application.cmd

java.exe application_2013_05_10.jar 

當您更新jar文件,則在更新的同時腳本文件(S)。用戶執行application.cmd腳本文件。

相關問題