树脂的'石榴' - 项目的自动魔法加载maven jar依赖项 - 但是如何为它们生成带有pom.xml的jar?

时间:2009-11-02 19:10:00

标签: java maven-2 resin pom.xml caucho

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目录? (哪种打败所有自动魔法的目的)

感谢您的回答,

祝你好运

1 个答案:

答案 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:

  

石榴是为解决这个问题而设计的   模块版本控制和类加载器   来自企业应用程序的问题   透视。虽然我们正在做   有点类的加载器背后的魔术   场景,开发者的观点是   相当简单和干净:

     
      
  1. 从.war
  2. 中移除罐子   
  3. 将它们放入Resin的project-jars目录
  4.   
  5. 在Maven pom文件中声明jar依赖项
  6.   
  7. 使用WEB-INF / pom.xml或您的网站将它们导入您的网络应用程序   树脂的web.xml
  8.   

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