2010-10-06 121 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级别,重命名,你对你的方式。

相关问题