如果我在Eclipse中创建一个实用程序项目和多个动态Web项目并进行设置,以便动态Web项目依赖于实用程序项目,我猜我将不得不将所有动态Web项目重新部署到服务器中在某些时候,我对实用程序项目进行了增强。如果我理解正确,设置依赖项会将实用程序类打包到每个动态Web项目的WEB-INF / lib文件夹中,从而创建多个实用程序jar / classes的副本。
但是有没有办法将一个实用程序jar /类的副本部署到我的服务器并在我的应用程序之间共享?我为一家拥有配置管理程序(繁文缛节,纸质工作,没有增值)的公司工作,所以我不必每次更改我的实用程序类时都需要重新部署我的所有应用程序并完成CM流程。我希望能够CM实用程序,然后让我的所有应用程序开始使用更新的实用程序项目。
答案 0 :(得分:4)
在Eclipse中,在构建路径中引用实用程序项目,但不要将其作为Java EE模块依赖项导出。要在同一服务器上的所有Web应用程序之间共享它,只需删除服务器的类路径。目前还不清楚你正在使用哪一个,所以我无法给出更详细的答案。在Tomcat的情况下,它是/lib
文件夹。或者,您也可以将其路径添加到Tomcat的共享类路径中,如catalina.properties
中所定义。更新后,只需重新启动/重新部署就足以让webapp(s)选择更改。其他servletcontainers / appservers提供类似的可能性。另请参阅Tomcat Classloader HOW-TO。
答案 1 :(得分:2)
首先,从治理的角度来看,你应该知道所有人使用那个jar以及改变它会受到什么影响。
如果您可能影响多个项目,那么将它与应用程序实际打包可能会更好,因为您可以控制何时在每个项目/应用程序的基础上“升级”到最新版本的jar。
如果您想要同时更新它们而不重新部署它们,那么最好将文件放在可访问应用程序服务器的位置(共享库目录)。
然后设置您的应用程序以将该jar添加到其类路径中。现在,如果您更新jar,它会立即影响所有这些。
您仍然可能需要退回应用程序或服务器才能使更改生效(取决于服务器)。
答案 2 :(得分:0)
已经有一段时间了,因为这个发布所以可能没什么问题,但可能会帮助其他人。
单独的更高级别应用程序使用单个共享库的另一个选择是实用程序库中的版本控制系统。
实质上,您在某个版本ID下从实用程序库发布已定义的API“服务级别” - 例如递增的整数(无论实用程序库的底层代码库):
然后,在实用程序库中,您可以处理“遗留”API的passthru支持...只需在新库中包装“旧”库接口...在同一个jar或“子”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)
另一个好处是,如果“App X”不再处于活动开发阶段,它仍然具有与其一直相同的API,功能和行为。同时,实用程序库和应用程序Y和Z可以继续有增无减。
通过第一个后续版本的包装器创建传递是一项更多的工作。 (并且在很大程度上取决于实用程序库的性质。)但是它会变成快速复制/粘贴,更改API级别,重命名,然后就可以了。