簡體   English   中英

Eclipse Java 實用程序項目和多個 Web 應用程序

[英]Eclipse Java utility project and multiple web apps

如果我在 Eclipse 中創建一個實用程序項目和多個動態 Web 項目並將其設置為動態 Web 項目依賴於該實用程序項目,我猜我將不得不將所有動態 Web 項目重新部署到服務器,如果在某個時候我對實用程序項目進行了改進。 如果我理解正確,設置依賴項會將實用程序類打包到每個動態 Web 項目的 WEB-INF/lib 文件夾中,從而創建實用程序 jar/類的多個副本。

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

在 Eclipse 中,在構建路徑中引用實用程序項目,但不要將其導出為 Java EE 模塊依賴項。 要在同一服務器上的所有 web 應用程序之間共享它,只需放入服務器的類路徑。 不清楚你用的是哪一個,所以我不能給出更詳細的答案。 對於 Tomcat,它是/lib文件夾。 或者,您也可以將其路徑添加到catalina.properties Tomcat 共享類路徑。 更新后,只需重新啟動/重新部署就足以讓 webapp(s) 選擇更改。 其他 servletcontainers/appservers 提供了類似的可能性。 另請參閱Tomcat 類加載器 HOW-TO

首先,從治理的角度來看,您應該知道所有使用該 jar 的內容以及對其進行更改會影響什么。

如果您可能影響多個項目,那么實際上將它與應用程序一起打包可能會更好,因為您可以控制何時基於每個項目/應用程序“升級”到最新版本的 jar。

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

然后設置您的應用程序以將該 jar 添加到其類路徑。 現在,如果您更新 jar,它會立即影響所有這些。

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

自從發布以來已經有一段時間了,所以可能沒有實際意義,但可能會幫助其他人。

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

本質上,您在某個版本 ID 下從實用程序庫發布定義的 API“服務級別” - 例如遞增的整數(無論實用程序庫的底層代碼庫如何):

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

然后,在實用程序庫中,您可以處理對“遺留”API 的傳遞支持……只需將“舊”庫接口包裝在新庫中……在同一個 jar 或“子”jar 庫(實用程序.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)

另一個好處是,如果“App X”不再處於積極開發階段,它仍然具有它一直知道的相同 API、功能和行為。 同時,實用程序庫和應用程序 Y 和 Z 可以繼續有增無減。

為第一個后續版本創建 pass thru 包裝器需要做更多的工作。 (並且在很大程度上取決於實用程序庫的性質。)但隨后它變成了快速復制/粘貼、更改 API 級別、重命名,然后您就可以開始了。

暫無
暫無

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

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