【问题标题】:Eclipse Java utility project and multiple web appsEclipse Java 实用程序项目和多个 Web 应用程序
【发布时间】:2010-10-06 21:40:31
【问题描述】:

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

但是有没有办法将实用程序 jar/类的副本部署到我的服务器并在我的应用程序之间共享?我在一家拥有配置管理程序的公司工作(繁文缛节,文书工作,没有附加价值),所以我宁愿不必重新部署我的所有应用程序并在每次对我的实用程序类进行更改时都通过 CM 流程。我希望能够对实用程序进行 CM,然后让我的所有应用程序开始使用更新的实用程序项目。

【问题讨论】:

    标签: java eclipse web-applications


    【解决方案1】:

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

    【讨论】:

    • 你和 Chris Aldrich 都在 anwsers 上发表了意见。但你的声望是克里斯的 500 倍!每个人都知道 BalusC 是谁 - 你的声誉在你之前!所以既然我只能接受一个答案,我会帮助克里斯,接受他的答案。
    【解决方案2】:

    首先,从治理的角度来看,您应该知道所有使用该 jar 的内容以及更改会影响哪些内容。

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

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

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

    您仍可能需要退回应用程序或服务器以使更改生效(取决于服务器)。

    【讨论】:

    • +1 治理,尽早解决!如果应用程序 X 因您的实用程序 jar 中的更改而中断,那么 Team X 就懒得更新了……这不好玩。然后再次同时支持多个版本也不好玩。
    • 我完全同意治理。实际上,我在我的问题中写下了这个问题,但在提交之前将其删除,因为从某种意义上说,我是在回答我自己的问题,而且我也不想影响答案。
    【解决方案3】:

    自从这篇文章发布以来已经有一段时间了,所以可能没有实际意义,但可能对其他人有所帮助。

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

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

    • API 级别:1
    • API ID:UTIL_API_20110630_1.0.1

    然后,在实用程序库中,您可以处理对“遗留”API 的直通支持……只需将“旧”库接口包装在新库中……在同一个 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 级别、重命名,然后您就可以开始了。

    【讨论】:

      猜你喜欢
      • 2015-08-08
      • 1970-01-01
      • 2010-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-12
      • 2011-09-16
      • 2010-09-22
      相关资源
      最近更新 更多