繁体   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