Resin java服务器有一个简洁的功能,他们称之为石榴(http://www.caucho.com/projects/pomegranate/),它允许在服务器的目录(project-jars /)中放入各种jar依赖项,然后从pom中加载它们用于web应用程序.xml文件。
问题是:我应该如何将罐装到树脂的项目罐中? (只是复制它们不起作用)
详细说明:
我有一个使用maven的工作项目,其中配置了所有依赖项 项目pom.xml文件。我可以建立一个webapp战争等。
我将jar文件复制到resin的project-jars /,因为它们是由maven为这个特定的web-app生成的。
当我部署战争时,树脂点pom.xml并尝试解决 依赖;不幸的是,它找不到任何文物 存储库(project-jars)。
我想这是因为我放在那里的所有罐子都没有 包含在其中的META-INF / maven / pom.xml文件。它们只是普通的罐子 就像那些由maven下载的那些。
在石榴网站上,他们说树脂用pom.xml文件扫描带有罐子的罐子,以确定它们的版本。
我应该如何创建包含pom.xml文件的jar?
或者我应该从我开发的存储库中手动复制foo-bar-1.0.pom文件 机器到树脂的project-jars目录? (哪种打败所有自动魔法的目的)
感谢您的回答,
祝你好运
贺
答案 0 :(得分:2)
我对Pomegranate Draft specification的理解是:
Servlet容器可以使用石榴作为
WEB-INF/lib
的扩展,具有以下优点:
- 在公共存储库中共享.jar文件,简化管理并减少.war大小
- 库依赖关系解析,包括处理子模块不兼容的能力
- 熟悉Maven pom.xml文件,以利用当前的开发实践。
- 与Servlet Web应用程序容器的可选集成
- 与Java CanDI(JSR-299)经理的可选集成
[...]
网络应用可能包含一个可选的
WEB-INF/pom.xml
,声明了网络应用自己的依赖关系。
所以我想我的想法是在战争pom.xml
中将依赖关系标记为“已提供”,并在WEB-INF/pom.xml
中将它们添加到Resin上进行部署。我没有测试过这个,所以我可能错了。
实际上,这种石榴看起来很有趣,但我现在还不完全明白。虽然我理解它的好处,但它似乎使WAR不便携,这是一个很大的缺点。我会再挖一点......
(编辑:我正在回答以下OP的评论)
说实话,我没有发现规范草案非常明确。但是,我在Caucho的博客上发现了这篇pomegranate modules帖子,详细介绍了如何使其适用于webapp:
石榴是为解决这个问题而设计的 模块版本控制和类加载器 来自企业应用程序的问题 透视。虽然我们正在做 有点类的加载器背后的魔术 场景,开发者的观点是 相当简单和干净:
- 从.war
中移除罐子- 将它们放入Resin的project-jars目录
- 在Maven pom文件中声明jar依赖项
- 使用WEB-INF / pom.xml或您的网站将它们导入您的网络应用程序 树脂的web.xml
醇>
至少,我了解这些步骤,他们回答了你的问题:你必须在Resin的project-jars目录中手动放下罐子。这不是我所期待的,但我认为我误解了石榴的含义。如果我没错,石榴是OSGI的一种替代品,它是关于模块捆绑和类加载伏都教的。它使用Maven的约定来描述依赖关系,但它不是关于依赖关系管理。