Maven 您能否引用Tycho通过groupId、artifactId和version解析的OSGi依赖关系?

Maven 您能否引用Tycho通过groupId、artifactId和version解析的OSGi依赖关系?,maven,dependencies,dependency-management,tycho,maven-dependency-plugin,Maven,Dependencies,Dependency Management,Tycho,Maven Dependency Plugin,在Tycho构建中,OSGi依赖项通常在相应模块(例如Eclipse插件)的MANIFEST.MF中指定。据我所知,Tycho识别这些依赖项,解决它们,并在构建时(很抱歉回溯机器链接;Tycho站点目前似乎正在经历一些更改) 有可能在其他maven插件中引用这种派生依赖项吗?例如,如果我想复制特定的依赖项,我如何知道我必须提供哪个groupId、artifactId和版本?Tycho有自己的依赖项解析机制,这与Maven的不同。Tycho从p2存储库而不是Maven存储库(至少通常是*)加载清单

在Tycho构建中,OSGi依赖项通常在相应模块(例如Eclipse插件)的MANIFEST.MF中指定。据我所知,Tycho识别这些依赖项,解决它们,并在构建时(很抱歉回溯机器链接;Tycho站点目前似乎正在经历一些更改)


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

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

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

根据您试图实现的目标,您可以尝试首先将p2捆绑包转换为Maven依赖项,然后使用Maven插件处理它们。对于您的特定示例,如果您不介意将构建拆分为多个步骤,这可能会有所帮助:


*您可以使用
pomDependencies=consive
配置Tycho以包括Maven工件。这些对于常规Maven插件来说是可见的,但我不建议这样做,因为构建越复杂,构建/部署就越困难

只是为了澄清一下,我知道您答案的第一段。然而,我认为Tycho仍然需要在运行时以Maven的方式表示OSGi依赖项。因此,对于这种运行时表示,artifactID、groupID和version可能由一些确定性规则选择。如果我知道这些规则,我可能会引用OSGi依赖项,尽管它们不是真正的Maven工件。不幸的是,我对Maven的运行时模型一无所知,所以我可能对正在发生的事情有一个完全错误的预期。据我所知,Tycho并没有以Maven本机理解的方式表示OSGi依赖关系。从Maven和常规Maven插件的角度来看,构建由没有任何(Maven)依赖关系的模块组成。您当然可以根据一些规则将OSGi捆绑包转换为Maven工件。如果bundle是用Maven构建的,并且包含一个pom,那么就从那里获取组/工件ID。我想你可以导出这些包,然后在另一个版本中处理它们。不过我不确定为什么要这样做。您是否有特定的用例?通常,人们希望以另一种方式将maven构件转换为捆绑包以用于构建,有一些插件和工具可用于此。最初提出引用OSGi捆绑包的想法的场景从架构角度来看是有缺陷的,因此我的想法更多的是一种黑客手段,而不是一个好的解决方案。最好不要在这里详述,因为我不想通过讨论替代品来污染这个希望相当明确的问题。只要没有人能证明相反,我就认为你的答案是理所当然的:)然而,Eclipse世界中的大多数依赖项可能仍然只能作为OSGI捆绑包提供。它不允许在所有Maven插件(F.E中)完全考虑它们,在Maven依赖插件中定义它们的包含/排除。