【问题标题】:Can you reference OSGi dependencies resolved by Tycho by groupId, artifactId and version?你能通过 groupId、artifactId 和 version 引用 Tycho 解析的 OSGi 依赖项吗?
【发布时间】:2020-10-26 21:22:40
【问题描述】:

在 Tycho 构建中,OSGi 依赖项通常在相应模块的 MANIFEST.MF 中指定(例如,Eclipse 插件)。据我了解,Tycho 会识别这些依赖关系,并在构建时解决它们并adds them to the maven build model(抱歉,返回机器链接;Tycho 网站目前似乎正在发生一些变化)。

是否可以在其他 maven 插件中引用这样的派生依赖项?例如,如果我想复制带有 maven-dependency-plugin 的特定依赖项,我如何知道我必须提供哪个 groupId、artifactId 和版本?

【问题讨论】:

    标签: maven dependencies dependency-management tycho maven-dependency-plugin


    【解决方案1】:

    Tycho 有自己的依赖解析机制,这与 Maven 不同。 Tycho 从 p2 存储库加载 Manifest 中定义的依赖项,而不是从 Maven 存储库(至少通常*)。 Maven 工件和 p2 包具有不同的元数据结构,因此您不能总是将它们相互映射。例如,捆绑包没有组/工件 ID 的概念。

    常规 Maven 插件只能处理常规 Maven 依赖项。 p2 工件对他们不可见。

    根据您要实现的目标,您可以尝试先将 p2 包转换为 Maven 依赖项,然后使用 Maven 插件处理它们。对于您的具体示例,如果您不介意将构建分成多个步骤,这可能会有所帮助:Use dependencies from Eclipse p2 repository in a regular Maven build?

    * 您可以使用 pomDependencies=consider 配置 Tycho 以包含 Maven 工件。这些对常规 Maven 插件是可见的,但我不建议这样做,它会使构建/部署变得更加困难,构建变得越复杂

    【讨论】:

    • 澄清一下,我知道您回答的第一段。然而,我认为,Tycho 仍然需要在运行时以某种方式以 Maven 方式表示 OSGi 依赖项。因此,artifactID、groupID 和 version 可能由一些确定性规则选择用于此运行时表示。如果我知道规则,我可能会引用 OSGi 依赖项,尽管它们不能作为真正的 Maven 工件静态使用。不幸的是,我对 Maven 的运行时模型一无所知,所以我可能对正在发生的事情有一个完全错误的期望。
    • 据我了解,Tycho 并没有以 Maven 原生理解的方式表示 OSGi 依赖项。从 Maven 和常规 Maven 插件的角度来看,构建由没有任何 (Maven) 依赖项的模块组成。您当然可以通过一些规则将 OSGi 包转换为 Maven 工件。如果捆绑包是使用 Maven 构建的并且包含一个 pom,它只需从那里获取组/工件 ID。我想你可以导出包然后在另一个版本中处理它们。
    • 我不确定为什么要/需要这样做。您有特定的用例吗?通常人们想反其道而行之,将 maven 工件转换为用于构建的包,有一些插件和工具可以做到这一点。
    • 从架构的角度来看,提出引用 OSGi 包的想法的原始场景存在缺陷,因此我的想法与其说是一个好的解决方案,不如说是一个 hack。最好不要在这里详细介绍,因为我不想通过讨论替代方案来污染希望相当明确的问题。只要没有人证明相反,我就会认为你的回答是理所当然的:)
    • 然而,Eclipse 世界中的大多数依赖项可能仍然只能作为 OSGI 包提供。这不允许在所有 Maven 插件中充分考虑它们(例如,在 maven-dependency-plugin 中为它们定义包含/排除)。
    猜你喜欢
    • 2021-07-10
    • 2012-02-13
    • 1970-01-01
    • 1970-01-01
    • 2022-11-14
    • 2017-07-28
    • 2014-04-14
    • 1970-01-01
    • 2013-11-16
    相关资源
    最近更新 更多