1

Resin Java 服务器有一个他们称之为 pomegranate ( http://www.caucho.com/projects/pomegranate/ ) 的简洁功能,它允许将各种 jar 依赖项放在服务器目录 (project-jars/) 中,然后加载它们web-app 来自其 pom.xml 文件。

问题是:我应该如何把罐子放到树脂的项目罐子里?(只是复制它们是行不通的)

细节:

我有一个使用 maven 的工作项目,所有依赖项都在项目 pom.xml 文件中配置。我可以建立一个 webapp 战争等。

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

当我部署战争时,resin 发现 pom.xml 并尝试解决依赖关系;不幸的是,它在其存储库(项目罐子)中找不到任何工件。

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

在 pomegranate 网站上,他们说树脂会扫描 project-jars 中的带有 pom.xml 文件的 jars,以确定它们的版本。

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

或者我应该手动将 foo-bar-1.0.pom 文件从我的开发机器上的存储库复制到树脂的 project-jars 目录?(哪一种打败了所有自动魔法的目的)

谢谢解答,

此致

贺拉斯

4

1 回答 1

2

我对Pomegranate Draft 规范的理解是:

Servlet 容器可以使用 pomegranate 作为扩展,WEB-INF/lib具有以下好处:

  • 在公共存储库中共享 .jar 文件,简化管理并减少 .war 大小
  • 库依赖解析,包括处理子模块不兼容的能力
  • 熟悉的 Maven pom.xml 文件,以利用当前的开发实践。
  • 与 Servlet web-app 容器的可选集成
  • 与 Java CanDI (JSR-299) 管理器的可选集成

[...]

web-app 可能包含一个可选WEB-INF/pom.xml的声明 web-app 自己的依赖项。

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

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

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

老实说,我觉得规范草案不是很清楚。但是,我在 Caucho 的博客上发现了这篇pomegranate modules帖子,其中详细介绍了如何让它在 webapp 上运行:

Pomegranate 旨在从企业应用程序的角度解决模块版本控制和类加载器问题。尽管我们在幕后做了一些类加载器的魔术,但开发人员的观点相当简单明了:

  1. 从你的 .war 中删除 jars
  2. 将它们放在 Resin 的 project-jars 目录中
  3. 在 Maven pom 文件中声明 jar 依赖项
  4. 使用 WEB-INF/pom.xml 或在您的 resin-web.xml 中将它们导入您的网络应用程序

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

于 2009-11-03T01:10:15.143 回答