2010-10-06 160 views
2

如果我在Eclipse中創建實用程序項目和多個動態Web項目並對其進行設置,以便動態Web項目取決於實用程序項目,我猜我必須重新部署所有如果在某些時候我會對該實用程序項目進行增強,那麼動態Web將投影到服務器。如果我理解正確,設置依賴關係會將實用程序類打包到每個動態Web項目的WEB-INF/lib文件夾中,從而創建多個實用程序jar/classes的副本。Eclipse Java實用程序項目和多個Web應用程序

但是有沒有辦法將實用程序jar/classes的一個副本部署到我的服務器並在我的應用程序之間共享?我爲一家擁有配置管理程序的公司工作(繁文,節,文書工作,沒有附加值),所以我寧願不必重新部署所有我的應用程序,每次我對實用程序類進行更改時都要經歷CM過程。我希望能夠CM工具,然後讓我所有的應用程序開始使用更新的實用程序項目。

回答

2

首先,從治理的角度來看,您應該知道所有使用該jar的內容以及會受到更改影響的內容。

如果您可能會影響多個項目,那麼將它實際打包到應用程序可能會更好,因爲您可以控制何時在每個項目/應用程序的基礎上「升級」到最新版本的jar。

如果要同時全部更新它們而不全部重新部署它們,則最好將文件放置在可訪問應用程序服務器(共享庫目錄)的位置。

然後設置您的應用程序以將該jar添加到其類路徑中。現在,如果更新jar,它會一次影響所有jar。

您仍然可能需要退回應用程序或服務器以使更改生效(取決於服務器)。

+0

+1治理,並且儘早解決問題!如果應用程序X由於實用程序jar的更改而中斷,那麼Team X不會被打擾更新以避免......不好玩。然後再次支持幾個版本也是沒有趣的。 – 2010-10-06 22:08:52

+0

我完全同意政府。其實,我寫了一篇關於我的問題是關注,但提交,因爲我是在某種意義上回答我的問題,我也不想影響答案之前刪除了。 – jeff 2010-10-07 12:56:52

4

在Eclipse中,引用構建路徑中的實用程序項目,但不要將其導出爲Java EE模塊依賴項。要在同一臺服務器上的所有Web應用程序之間共享,只需放入服務器的類路徑即可。目前還不清楚你正在使用哪一個,所以我不能給出更詳細的答案。在Tomcat的情況下,它是/lib文件夾。或者,您也可以將其路徑添加到在catalina.properties中定義的Tomcat共享類路徑。更新之後,重新啓動/重新部署應該足以讓Web應用程序選擇更改。其他servlet容器/ appservers提供類似的可能性。另見Tomcat Classloader HOW-TO

+0

注:測試,測試,再測試。 – BalusC 2010-10-06 22:04:00

+0

你和克里斯·奧爾德里奇都對狩獵者發表了指責。但是你擁有Chris的名聲500倍!每個人都知道BalusC是誰 - 你的聲譽在你身上!所以既然我只能接受一個答案,我會幫助克里斯並接受他的答案。 – jeff 2010-10-07 13:09:06

0

已經有一段時間了,因爲這張貼很可能有點爭議,但可能會幫助其他人。

單獨的更高級別應用程序使用單個共享庫的另一個選擇是實用程序庫中的版本控制系統。

在本質上,在發佈從下一些版本ID實用程序庫定義的API「服務級別」 - 諸如遞增的整數(無論實用程序庫的底層代碼庫的):

  • API級別:1個
  • API ID:UTIL_API_20110630_1.0.1

然後,該實用程序庫中,你辦理「遺產」的API支持中繼...通過簡單的包裝新圖書館內的「老」庫接口。無論是在同一個罐子裏,還是「ch ild「jar庫(Utility.jar將調用重新映射到child.jar)。

以這種方式,應用程序建立API級別其期望。因此,應用程序只能看到主要的「Utility.jar」並通過期望的API級別訪問它,即使後端實現可能會改變和發展。

App X, Y, Z 
Util.jar 
--> Util_1.0.1.jar (API Level: 1) 
--> Util_1.0.3.jar (API Level: 1) 
--> Util_1.2.7.jar (API Level: 1) 
--> ... 
--> Util_2.0.1.jar (API Level: 2) 

的另一個好處是,如果「X程序」正在積極開發不再是它仍然具有相同的API,功能和行爲也一直知道。同時,實用程序庫和應用程序Y和Z可以繼續保持不變。

這是更多的工作,以創建直通包裝爲先的後續版本中。 (而且在很大程度上取決於實用程序庫的性質。)但後來它成爲一個快速複製/粘貼,更改API級別,重命名,你對你的方式。

相關問題