簡體   English   中英

在java中處理外部庫的正確方法(使用eclipse)

[英]The right way to deal with external libraries in java (using eclipse)

這在某種程度上是對我過去幾周匆匆解決的一個以前未解答的問題( 鏈接 )的跟進,現在它已經到了我不能再發展的地步......

所以這是交易; 我有比純CS更多的數學/工程背景,所以我在正確/大規模軟件開發方面沒有很多經驗,而是腳本和算法。 既然我正在研究一個大型項目,我自己就會對開發的某些方面感到困惑。 其中一個是處理庫/依賴項

我最初在我的項目文件夾(在Eclipse工作區中)創建了一個名為lib文件夾,並在那里復制了我的外部庫,然后將它們添加到構建路徑中。 但是后來我還需要其他一些東西,比如JCommonsJFreeChartApache Commons Math等。根據說明,這些庫可以/應該包含在用戶庫中,允許開發人員從IDE中查看文檔和源代碼(例如Eclipse) )。 到目前為止,我已經把它弄好了,我希望......

那問題出在哪里? 首先,它出現了,因為上面提到的用戶庫沒有包含在項目的SVN副本中,這意味着想要測試我的項目的同事不能這樣做,只需從SVN獲取項目。 現在,當我在工作中更改我的工作站時,問題的第二階段沒有表面,我想從我的備份中將我的項目導入Eclipse,但是除了那些用戶庫之外的所有內容都在那里。 為了使事情變得更復雜,當這個軟件完成后,它將在服務器上實現,所以如果所有東西都可以打包到一個單獨的庫或更好的可運行的jar文件中,那將是絕對最好的。

我之前被建議看看Maven,或者Ivy,但是在檢查它們之后我最初的理解是它們從一開始就被使用,主要用於更復雜的項目。 老實說,我完全不知道如何管理我的依賴項。 有任何想法嗎?

(抱歉讓它保持很長時間,但我認為更完整,而且信息不充分)

編輯:我設法解決了問題; 問題顯然源於eclipse沒有將所有資源復制到一個地方的簡單事實,而某些庫的安裝說明並沒有真正警告你如何以最佳方式管理庫。

感謝大家,他們花時間嘗試幫助我。 我會及時看看像Maven和Ivy這樣的項目,這絕對是有趣的東西。 但是現在我只需要回到運行狀態的軟件,長時間摔跤新東西.. :)

冒着異端行為的風險,我會說Maven和wot-not在這里是矯枉過正的。 您需要在SVN項目中使用依賴項,這很簡單。 您已將lib文件夾添加到Eclipse中的構建路徑中,這很好。 但除非您專門將lib文件夾的內容添加到項目中(如Fred所述),否則這些項目將無法提交給SVN - 它們只會在您的設置的類路徑中引用。 這對你有好處,對任何想要查看你的項目的人都沒有好處(正如你所發現的那樣)。

我很欣賞我們可以就最佳實踐進行無休止的討論,將第三方庫提交給版本控制的有效性等等......但我認為大多數人都有工作要做;-)

花些時間學習如何使用Maven創建項目。 它為你做了很多事情,這太棒了。

好吧,我認為這可以解決..

在Java構建路徑屏幕的Eclipse中,還有一個導入jar庫選項,允許您選擇項目庫文件夾。實際上有一個選項標記文件夾我認為..

另一件事因為它將部署到服務器,你必須擁有lib文件夾中的每個jar。

有一種螞蟻技術,你可以在jar中檢查一個類和一個屬性,以便在繼續執行構建序列之前驗證從lib文件夾導入的正確jar。執行Google搜索,你會發現有關的帖子它..

三個選項是:

  • Mavenrefcard ) - 一個非常強大的工具,但同時也非常容易使用。 我在我的所有項目中都使用它,無論它們有多小。 它是依賴管理+構建工具之一
  • 常春藤 - 很像maven,但它只是一個依賴管理工具。 你必須用ant做你的構建
  • 提交jar和eclipse項目文件 - 這在IDE之間不可移植,但實際上並不是那么可怕並且在許多項目中使用

更新:解釋maven意識形態的幾個詞:

  • 約定優於配置 - 您以預定義的方式構建項目。 這與依賴管理沒有關系,所以只需提及它。
  • 存儲庫 - 這是jar文件實際駐留的位置。 它們不駐留在您的SVN中,因為它們具有單獨的版本控制機制,因為它們占用了不必要的空間。
  • IDE與maven集成。 例如m2eclipse獲取maven依賴項並將它們附加到eclipse構建路徑,從而使用法透明
  • 依賴解析 - 在pom.xml定義多個<dependency>標記,包含名稱和版本,maven從遠程存儲庫中獲取所有必需的jar。 它還會獲取依賴項所依賴的jar(傳遞依賴項)。 因此,您最終沒有NoClassDefFoundException

對我來說,這非常簡單:你定義你需要的東西,maven決定如何獲取它,以及如何將它添加到你的類路徑中。

你沒有一個復雜的項目或綠地項目可以從Maven中受益,所以我會接受你已經給出的建議嘗試並試一試。

如果您真的不想,那么您應該將您的庫與您的代碼一起檢查到SVN。 如果某個版本的代碼在某個時間點依賴於某個特定的庫,那么那里就有一個合同 ,並且不包括SVN中的庫你違反了合同 - 這是你已經發現的,因為你無法重新創建你的應用程序從頭開始。

至於在單個JAR中打包 - 這可以用Ant,但為什么你需要?

在我們公司,我們有一個單獨的SVN存儲庫用於第三方庫,我們有一個公司規則,在每個開發工作站上,此存儲庫都簽出到C:\\ dev。 所以每個人都有正確的圖書館,項目工作正常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM