我已经成功地将OSGi特定的元数据添加到了飞碟-pdf Maven工件的MANIFEST中。但是,我没有成功将该工件的依赖项和传递依赖项嵌入到创建的JAR文件中。
我使用的是来自GitHub [1]的flying-saucer-pdf的原始资源,并将以下语句添加到pom.xml文件中:
for
工件在其原始pom.xml中声明为itext版本2.1.7的依赖项,我没有触及。我也没有弄乱罐子的原始包装类型。
不幸的是,这只是部分工作。 MANIFEST.MF似乎正确并包含预期的OSGi标记:
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<executions>
<execution>
<id>bundle-manifest</id>
<phase>process-classes</phase>
<goals>
<goal>manifest</goal>
</goals>
<configuration>
<instructions>
<Embed-Dependency>itext</Embed-Dependency>
<Embed-Transitive>true</Embed-Transitive>
</instructions>
</configuration>
</execution>
</executions>
</plugin>
但是没有将itext库放入生成的JAR中,即MANIFEST的Bundle-ClassPath条目指向缺少的内容。
此外,我尝试创建一个全新的工件,它声明了对原始的fly-saucer-pdf工件的依赖关系,并将其重新捆绑为一个OSGi包,在StackOverflow上流动这个答案[2],这很有用。
我能看到的唯一真正的区别是包装类型'捆绑'与'罐'。但是我无法在原始的fly-saucer-pdf工件中更改该包装类型,因为所有内容都需要保持非OSGi用法,以便将该更改作为推送请求接受。
你们是否知道这种与maven-bundle-plugin的嵌入依赖性是否真的可以与包装类型“jar”一起使用?或者是否需要包装类型'捆绑'?
我感谢任何回复和暗示我可以尝试直接在原始工件中完成重新捆绑。
非常感谢。
此致 蒂莫·罗尔伯格
答案 0 :(得分:2)
有两种方法可以使用maven bundle插件。
第一种方法是使用
<extensions>true</extensions> and <packaging>bundle</packaging>
在这种情况下,maven bundle插件负责所有构建步骤,并且可以影响jar文件内容。
第二种方法是使用清单目标并在jar插件中添加清单。在这种情况下,maven bundle插件只能影响jar。它不能嵌入任何其他库或复制外部私有类。
因此,如果您需要嵌入,那么唯一的方法就是更改包装。
所以我认为有两种解决方案不会对原始罐子造成太大影响。