我开始使用 p2-maven-plugin ,以便(希望)方便地将非OSGi JAR集成到我们的项目中。
我有一个我想要OSGi-ify的工件,称为com.thirdparty.artifact
。我目前正在使用p2-maven-plugin的standard configuration,我在pom.xml
中列出了我的工件,如下所示:
<artifact><id>com.thirdparty:artifact:1.2.3</id></artifact>
此工件具有名为com.thirdparty:library:2.5
的传递依赖项,该依赖项导出包com.thirdparty.library
,而com.thirdparty:artifact
又由mvn p2:site
导入。当我运行com.thirdparty:artifact:1.2.3
时,我会得到一个包含com.thirdparty:library:2.5
和com.othervendor:library
的P2网站 - 到目前为止一切正常。
现在,事情变得混乱了。我现有的目标平台已经包含一个名为com.thirdparty.library
的工件(不同的供应商,它在那里,我无法改变它),也导出完全相同的包com.thirdparty:artifact
(但完全是不同的版本)。
在运行时,OSGi / Eclipse黑魔法(我可能永远不会完全理解)试图使用com.thirdparty.library
和<来解析com.othervendor:library
对包com.thirdparty:library:2.5
的依赖性。强>不我提供的MANIFEST.MF
- 我显然遇到了麻烦。这是我的情况的可视化:
绝对没有OSGi火箭科学家,我的第一个想法是检查com.thirdparty:artifact
中的Import-Package: com.thirdparty.library
。除此之外,还显示以下内容:
com.thirdparty:artifact
所以,这显然只是告诉com.othervendor:library
从某些包中导入这个包,OSGi / Eclipse认为“好吧,com.thirdparty:library
比p2-maven-plugin
更充足}”。
似乎有two methods缩小了实际使用的依赖关系。但是:我不确定(a)如何将它们集成到我的p2-maven-plugin
工作流程中,以及(b)我不明白为什么Import-Package
不会自动要求{{1}中的具体包版本指令(此信息毕竟已在源pom.xml
中指定)。
可能我在这里看不到树林。因此,非常欢迎我在上述问题旁边的任何一般性建议!
[edit] 这是我的pom.xml
(我即将参加OSGi-ify的具体图书馆是Selenium):
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>com.example.p2dependencies</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>pom</packaging>
<build>
<plugins>
<plugin>
<groupId>org.reficio</groupId>
<artifactId>p2-maven-plugin</artifactId>
<version>1.2.0</version>
<executions>
<execution>
<id>default-cli</id>
<configuration>
<artifacts>
<artifact><id>org.seleniumhq.selenium:selenium-java:3.4.0</id></artifact>
</artifacts>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
[edit2] 问题似乎已经解决,似乎问题是一个仅由com.othervendor:library
导出的附加包。