【问题标题】:How can I use Eclipse p2 repositories from Maven?如何使用来自 Maven 的 Eclipse p2 存储库?
【发布时间】:2012-09-02 22:52:28
【问题描述】:

我正在尝试创建一个基于 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 install 执行所有操作:从 p2 存储库中提取库,从 Maven 存储库中提取其他库等等。

这是否可以通过 Maven 和 Tycho 集成来实现?

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

【问题讨论】:

  • 根据你自己的回答,我好像完全没看懂你的问题。您是否正在尝试避免从 p2 工件到 Maven 工件的手动转换(如链接问题中所述)?
  • 可能是我的错 :) 是的,我试图避免下载 jar,然后通过发出 mvn 命令将它们添加到本地存储库。通过在引用的问题中创建项目,并声明对该项目(来自其他项目)的重新打包结果的依赖关系,我可以自动执行此操作。
  • 如果您对referenced question 的解决方案感到满意,那么您还有什么问题? “如何从其他 Maven 项目引用 Maven 构建的 JAR”?
  • @oberlies:请查看问题的更新。现在有意义吗?
  • @sarikan:那些有自己依赖关系的非平凡插件呢?您是如何设法将它们转换为单个 JAR 的?

标签: eclipse maven p2 tycho


【解决方案1】:

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 依赖项。

【讨论】:

  • 这不是我想要做的。我正在使用来自 Eclipse 生态系统的库,这些库可以用作独立的 jar。例如 EMF 罐子。我试图避免将我的整个项目拉入 OSGI。我提到的问题(和答案)就是这样做的。找到了解决办法,一会儿写。
  • @sarikan:第二种选择不需要构建 OSGi 工件。
  • @oberlies 您写道“Tycho 在运行时将 OSGi/p2 依赖项注入到 Maven 模型中,因此例如 maven-compiler-plugin:compile 调用将同时看到 Maven 依赖项和 p2 依赖项。” - 您能否详细说明 Tycho 如何注入依赖项以便这些依赖项对另一个插件可见?我正在尝试实现非常相似的事情,但不是使用maven-compiler-plugin,而是使用需要访问 P2 依赖项的自定义插件。
【解决方案2】:

解决方案是使用 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 工件。

【讨论】:

    猜你喜欢
    • 2012-03-20
    • 2011-10-04
    • 2016-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-12
    相关资源
    最近更新 更多