我如何使用Maven的Eclipse p2存储库?

时间:2012-09-02 22:52:28

标签: eclipse maven p2 tycho

我正在尝试创建一个基于Eclipse的设置,其中Eclipse项目是基于Maven的。因此无论是否使用Eclipse,它都应该与Maven一起使用。

我对各种Eclipse项目库有依赖性,还有更多要添加的项目库。我想使用p2存储库,并且我已经设法提取Eclipse EMF库并按照此示例将其转换为jar:Use dependencies from Eclipse p2 repository in a regular Maven build?

问题是,我找不到简化流程的方法。我需要从上面给出的问题手动安装重新打包的依赖项到本地Maven存储库,以便我可以在其他项目中引用它。我想将p2存储库中的人工制品无缝集成到基于Maven的设置中。 m4e看起来不像我正在寻找的平滑解决方案:理想情况下,我想分发一组目录,这些目录可以响应简单的mvn clean安装:从p2 repo中提取库,从Maven存储库中提取其他库等等。

这可以通过Maven和Tycho整合来实现吗?

更新:首先,澄清问题:只是能够引用P2存储库对于需要从另一个项目使用此引用的场景没有帮助。从P2存储库引用的库(或库)必须重新打包为jar,以便其他Maven项目可以引用它。引用的问题是包装。但是,它没有解释如何从其他项目中使用此重新打包的输出(程序集)。在我的例子中,结果是从聚合POM引用程序集,并继承了POM,用于所有希望使用具有P2存储库源的库的项目。

2 个答案:

答案 0 :(得分:4)

Tycho项目可以从p2存储库和Maven存储库中提取它们的依赖项(请参阅此related answer)。这可能是一个解决方案,即使您没有为OSGi运行时构建:大多数OSGi包也可以作为类路径上的“普通”JAR。

限制:从Maven存储库引用的工件也必须是OSGi包,因此Tycho将它们视为依赖解析。如果不是这种情况(并且你找不到OSGi包的替换),你可以将Tycho的依赖解析与普通的Maven插件结合起来:

  • 使用Tycho的一种打包类型(例如eclipse-feature)并以包装类型的文件格式指定p2工件的依赖关系(例如feature.xml
  • 另外在POM中配置普通Maven目标。 Tycho在运行时将OSGi / p2依赖项注入到Maven模型中,因此例如maven-compiler-plugin:compile调用将同时看到Maven依赖项和p2依赖项。

答案 1 :(得分:1)

解决方案是使用Maven创建一个多模块设置,并声明对EMF库重新打包输出的依赖(来自我引用的问题)所有项目的父pom都有:

    <dependencies>
    <dependency>
        <groupId>com.mymodule</groupId>
        <artifactId>myartifact</artifactId>
        <version>0.0.1</version>
        <classifier>repackaged</classifier>                 
    </dependency>
  </dependencies>
      <modules>
            <module>../mymodule</module>
     </modules>

这使得具有此模块作为父项的所有模块都可以访问重新打包的P2工件。