2011-05-24 267 views
7

昨晚我試圖用一個簡單的教程來構建一個使用堆棧的應用程序 - Spring(2.5)+ JPA(1.0)+ Hibernate(第一次下載,所以不知道要使用哪個版本)。不幸的是,我不想使用Maven作爲目標參與者在ANT構建。像往常一樣擊中搜索引擎,並以某種方式獲得appcontext,persistence.xml和java類中的步驟。當我開始需要圖書館的那一刻,我迷失在JAR地獄中。幸運的是,Spring方面沒有太多問題,因爲所有依賴的JAR都打包在一起用於我的Spring 2.5.6。我們是否在java平臺上類似於dll地獄的jar地獄?

當它來到冬眠,我根本不知道其被列入首位的所有JAR文件。在下一個挑戰中,不知道每個版本要添加哪個版本。

最後我得到了整個事情的工作,但它看起來太嚇人了,除非我通過Maven的天堂採取再次輸入該JAR地獄。

隨着大量攔截機和織布的,它正在成爲誰曾經喜歡Java的主要爲大量的在我的代碼是做透明常規的Java程序員更復雜。

我在思考過程中是否正確?

+2

不是所有的JPA實現都有像Hibernate一樣的依賴關係。 – DataNucleus 2011-05-24 15:20:05

+3

我們不會朝它邁進。我們從一九九一年起就在這裏。看看應該解決這個問題的「技術」的數量。以OSGi和他們的頁面爲例*「爲什麼OSGi」*,你會看到例如下面的代碼:*「OSGi技術解決了JAR地獄」*。 OSGi傢伙在涉及到依賴性問題時並不完全無能爲力:) – SyntaxT3rr0r 2011-05-24 15:42:56

回答

9

你仍然可以有依賴關係管理,同時使用Ant,使用Ivy。 請參閱詳細教程here以獲得您想要使用的堆棧。 (不包括休眠,但我猜你可以找到如何快速添加)

還有一件事,如果你指的是具有完整Spring 2.5.6包的spring.jar,我強烈建議不要使用它,你可能不需要超過20%的庫中包含它。 (花時間去發現究竟哪些庫,你確實需要,只挑選那些。)

另外,還要考慮,如果你能使用Spring 3,以及Hibernate的,如果你可以自由選擇一個版本,我會去爲最新。

+0

謝謝。我使用了Maven和OSGi。他們很棒。但爲了我的需要,參與者不能進入Maven存儲庫並且沒有很好的互聯網連接,我必須進入一個斷開連接或靜態的庫,這些庫建立在構建系統時所有罐子都存在的地方。因此我一個接一個尋找每個罐子。 – arunram 2011-05-25 16:39:19

+1

甚至更​​多我的第二個評論仍然有效,請不要使用spring.jar,請檢查您需要的是哪個罐子。但是由於你的侷限性,你可能會認爲使用任何一種集中式依賴關係管理系統是一種開銷,只不過是指出這樣一個事實,即它是一個類似於maven的系統,也就是常春藤。 – abalogh 2011-05-25 16:44:08

1

我以前使用其他JPA實現,但我用Hibernate進行了今年第一次。當然,在瓶子依賴方面它比其他更復雜,但在Getting Started GuideChapter 1Obtaining Hibernate下,我找到了我需要的罐子和原因的詳細信息。

後來我確實遭受了瓶子地獄問題,並不是因爲不知道使用哪個罐子,而是因爲我們處於一個非常大的問題中,而其他子項目已經在使用舊版本的Hibernate類,並且這使我在運行時遇到了很多麻煩,並花了我幾天的時間來診斷和修復。

我認爲這是暫時成爲現實,而像Maven的或類似的OSGi試圖緩解這個問題的框架工具。

也許我們最大的希望是Project Jigsaw打算成爲未來的JDK 8的一部分,並嘗試解決我們目前擁有的Java模塊化問題。它將像OSGi一樣具有類固醇,並且構建在JDK本身中。

但出現這種情況之前,我能告訴你的是名言被Wiston丘吉爾

如果你正在經歷煉獄,保持 去

+0

+1僅供參考 – abalogh 2011-05-24 17:46:01

0

這是一Grails解決的問題 - 通過捆綁一組特定的jar(Spring,Hibernate等),並且隨着Grails的發展升級這些jar。