Eclipse Java实用程序项目和多个web应用程序

Eclipse Java实用程序项目和多个web应用程序,java,eclipse,web-applications,Java,Eclipse,Web Applications,如果我在Eclipse中创建一个实用程序项目和多个动态web项目,并将其设置为动态web项目依赖于该实用程序项目,那么我猜如果在某个时候对该实用程序项目进行了增强,我将不得不将所有动态web项目重新部署到服务器。如果我理解正确,设置依赖项将把实用程序类打包到每个动态web项目的web-INF/lib文件夹中,从而创建实用程序jar/classes的多个have副本 但是,有没有一种方法可以将实用程序jar/类的一个副本部署到我的服务器上,并在我的应用程序之间共享?我在一家有配置管理程序(繁文缛节

如果我在Eclipse中创建一个实用程序项目和多个动态web项目,并将其设置为动态web项目依赖于该实用程序项目,那么我猜如果在某个时候对该实用程序项目进行了增强,我将不得不将所有动态web项目重新部署到服务器。如果我理解正确,设置依赖项将把实用程序类打包到每个动态web项目的web-INF/lib文件夹中,从而创建实用程序jar/classes的多个have副本


但是,有没有一种方法可以将实用程序jar/类的一个副本部署到我的服务器上,并在我的应用程序之间共享?我在一家有配置管理程序(繁文缛节、文书工作、无附加值)的公司工作,因此我不希望每次更改实用程序类时都必须重新部署所有应用程序并执行配置管理流程。我希望能够CM的实用程序,然后让我的所有应用程序刚刚开始使用更新的实用程序项目

在Eclipse中,在构建路径中引用实用程序项目,但不要将其导出为JavaEE模块依赖项。要在同一服务器上的所有webapp之间共享它,只需输入服务器的类路径。不清楚你用的是哪一种,所以我不能给出更详细的答案。对于Tomcat,它是
/lib
文件夹。或者,您也可以将其路径添加到Tomcat的共享类路径中,如
catalina.properties
中所定义。更新后,只需重新启动/重新部署就足以让webapp选择更改。其他servletcontainers/appservers也提供了类似的可能性。另请参见。

首先,从治理的角度来看,您应该知道所有人都在使用这个jar,以及对它的更改会影响到什么

如果您可能会影响多个项目,那么最好将其与应用程序一起打包,因为您可以根据每个项目/应用程序控制何时“升级”到jar的最新版本

如果希望同时更新所有文件而不重新部署所有文件,那么最好将文件放置在应用程序服务器可以访问的位置(共享库目录)

然后设置应用程序,将该jar添加到其类路径中。现在,如果您更新jar,它会同时影响所有jar


您可能仍然需要跳出应用程序或服务器才能使更改生效(取决于服务器)。

这篇文章发表已有一段时间了,因此可能没有什么意义,但可能会帮助其他人

另一个让单独的更高级别应用程序使用单个共享库的选项是实用程序库中的版本控制系统

本质上,您可以在某个版本ID下从实用程序库发布定义的API“服务级别”-例如递增整数(与实用程序库的底层代码库无关):

  • API级别:1
  • API ID:UTIL_API_20110630_1.0.1
然后,在实用程序库中,处理对“遗留”API的passthru支持。。。通过简单地将“旧”库接口包装到新库中。。。在同一个jar或“child”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)
另一个好处是,如果“appx”不再处于活跃的开发阶段,它仍然拥有它一直知道的相同API、功能和行为。同时,实用程序库和应用程序Y和Z可以继续使用


为随后的第一个版本创建直通包装器需要做更多的工作。(这在很大程度上取决于实用程序库的性质。)但是,它会变成一个快速复制/粘贴,更改API级别,重命名,然后您就可以开始了。

+1到治理,并尽早解决它,而不是晚些时候!如果应用程序X由于实用程序jar中的更改而中断,那么团队X就不会费心更新它了。。。不好玩。同样,同时支持多个版本也不好玩。我完全同意governace。我实际上在我的问题中写到了这个问题,但在提交之前删除了它,因为在某种意义上,我是在回答我自己的问题,我也不想影响答案。你和克里斯·奥尔德里奇都在anwsers上给出了答案。但是你的名声是克里斯的500倍!每个人都知道巴卢斯是谁——你的名声在你之前!因此,由于我只能接受一个答案,我将帮助克里斯并接受他的答案。