gpt4 book ai didi

java - Resin 的 `pomegranate' - 自动神奇加载项目的 Maven jar 依赖项 - 但如何使用 pom.xml 为它们生成 jar?

转载 作者:行者123 更新时间:2023-11-30 05:15:17 25 4
gpt4 key购买 nike

Resin java 服务器有一个巧妙的功能,他们称之为 pomegranate ( http://www.caucho.com/projects/pomegranate/ ),它允许将各种 jar 依赖项放入服务器目录 (project-jars/) 中,然后从其 pom.xml 为 Web 应用程序加载它们文件。

问题是:我应该如何将 jar 放入树脂的项目 jar 中? (仅仅复制它们是行不通的)

详细信息:

我有一个使用 Maven 的工作项目,所有依赖项都配置在项目 pom.xml 文件。我可以构建网络应用 war 等。

我将 jar 文件复制到了resin的project-jars/,因为它们是由maven为这个特定的网络应用程序生成的。

当我部署 war 时,resin 发现 pom.xml 并尝试解析依赖关系;不幸的是,它无法在其中找到任何文物存储库(项目 jar)。

我想这是因为我放在那里的所有 jar 都没有META-INF/maven/pom.xml 文件打包在其中。它们只是普通的 jar 就像maven下载的那样。

在石榴网站上,他们说树脂会扫描项目 jar 中是否有带有 pom.xml 文件的 jar ,以确定它们的版本。

我应该如何创建包含 pom.xml 文件的 jar?

或者我应该从我的开发版本库中手动复制 foo-bar-1.0.pom 文件机器到resin的project-jars目录? (这违背了所有自动魔法的目的)

感谢您的回答,

致以诚挚的问候

贺拉斯

最佳答案

我对Pomegranate Draft specification的理解是:

Servlet containers can use pomegranate as an extension to the WEB-INF/lib with the following benefits:

  • Shared .jar files in a common repository, simplifying management and reducing .war sizes
  • Library dependency resolution, including the ability to handle sub-module incompatibilities
  • Familiar Maven pom.xml files, to take advantage of current development practices.
  • Optional integration with Servlet web-app containers
  • Optional integration with Java CanDI (JSR-299) managers

[...]

The web-app may contain an optional WEB-INF/pom.xml declaring the web-app's own dependencies.

所以我想这个想法是在 war pom.xml 中将依赖项标记为“已提供”,并将它们添加到 WEB-INF/pom.xml 中Resin 上的部署。不过我还没有测试过,所以我可能是错的。

事实上,这个石榴看起来很有趣,但我现在还没有完全理解。虽然我了解它的好处,但它似乎使 WAR 不可移植,这是一个很大的缺点。我会进一步挖掘它......

(编辑:我正在回答下面OP的评论)

说实话,我觉得规范草案不是很清楚。然而,我发现了这个pomegranate modules Caucho 博客上的帖子详细介绍了如何让它在网络应用程序中工作:

Pomegranate is designed to solve themodule versioning and classloaderissues from an enterprise-applicationperspective. Although we’re doing abit of classloader magic behind thescenes, the developer perspective isfairly simple and clean:

  1. remove jars from your .war
  2. drop them in Resin’s project-jars directory
  3. declare jar dependencies in Maven pom files
  4. import them to your web-app with WEB-INF/pom.xml or in yourresin-web.xml

至少,我理解这些步骤,它们回答了你的问题:你必须手动将 jar 放到 Resin 的 project-jars 目录中。这不是我所期待的,但我认为我误解了石榴的意义。如果我没记错的话,石榴是 OSGI 的一种替代品,它是关于模块捆绑和类加载的巫毒。它使用 Maven 的约定来描述依赖关系,但它与依赖关系管理无关。

关于java - Resin 的 `pomegranate' - 自动神奇加载项目的 Maven jar 依赖项 - 但如何使用 pom.xml 为它们生成 jar?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1663060/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com