2016-11-03 24 views
1

我已经将OSGi特定元数据添加到fly-saucer-pdf Maven工件的MANIFEST中。但是,我不能成功将该工件的依赖关系和传递依赖关系嵌入到创建的JAR文件中。在maven-bundle-plugin不起作用的情况下在JAR中嵌入依赖关系

我使用原来的源从从GitHub采取飞碟-PDF为[1],并添加以下语句到pom.xml文件:

<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的版本2.1.7在我没有碰到的原始pom.xml中。我也没有弄乱jar的神器原始包装类型。

不幸的是,这只是部分工作。该MANIFEST.MF似乎是正确的,并包含预期的OSGi标签:

Manifest-Version: 1.0 
Bundle-Description: Flying Saucer is a CSS 2.1 renderer written in Jav 
a. This artifact supports PDF output. 
Bundle-License: http://www.gnu.org/licenses/lgpl.html 
Bundle-SymbolicName: org.xhtmlrenderer.flying-saucer-pdf 
Archiver-Version: Plexus Archiver 
Built-By: u0400072 
Bnd-LastModified: 1478168053263 
Bundle-ManifestVersion: 2 
Embed-Dependency: itext 
Import-Package: com.apple.mrj,com.lowagie.toolbox,javax.crypto,javax.i 
mageio,javax.imageio.metadata,javax.imageio.plugins.jpeg,javax.imagei 
o.stream,javax.swing,javax.xml.parsers,javax.xml.transform,javax.xml. 
transform.dom,javax.xml.transform.sax,javax.xml.transform.stream,org. 
bouncycastle.asn1,org.bouncycastle.asn1.cmp,org.bouncycastle.asn1.cms 
,org.bouncycastle.asn1.ocsp,org.bouncycastle.asn1.pkcs,org.bouncycast 
le.asn1.tsp,org.bouncycastle.asn1.x509,org.bouncycastle.cms,org.bounc 
ycastle.crypto,org.bouncycastle.crypto.engines,org.bouncycastle.crypt 
o.modes,org.bouncycastle.crypto.paddings,org.bouncycastle.crypto.para 
ms,org.bouncycastle.jce.provider,org.bouncycastle.ocsp,org.bouncycast 
le.tsp,org.w3c.dom,org.xhtmlrenderer.context,org.xhtmlrenderer.css.co 
nstants,org.xhtmlrenderer.css.extend,org.xhtmlrenderer.css.parser,org 
.xhtmlrenderer.css.sheet,org.xhtmlrenderer.css.style,org.xhtmlrendere 
r.css.style.derived,org.xhtmlrenderer.css.value,org.xhtmlrenderer.ext 
end,org.xhtmlrenderer.layout,org.xhtmlrenderer.render,org.xhtmlrender 
er.resource,org.xhtmlrenderer.simple.extend,org.xhtmlrenderer.swing,o 
rg.xhtmlrenderer.util,org.xml.sax,org.xml.sax.helpers 
Require-Capability: osgi.ee;filter:="(&(osgi.ee=JavaSE)(version=1.6))" 
Tool: Bnd-3.2.0.201605172007 
Embedded-Artifacts: itext-2.1.7.jar;g="com.lowagie";a="itext";v="2.1.7 
" 
Export-Package: org.xhtmlrenderer.pdf;uses:="org.w3c.dom,org.xhtmlrend 
erer.css.constants,org.xhtmlrenderer.css.parser,org.xhtmlrenderer.css 
.style,org.xhtmlrenderer.css.value,org.xhtmlrenderer.extend,org.xhtml 
renderer.layout,org.xhtmlrenderer.render,org.xhtmlrenderer.resource,o 
rg.xhtmlrenderer.simple.extend,org.xhtmlrenderer.swing,org.xml.sax";v 
ersion="9.0.10",org.xhtmlrenderer.pdf.util;uses:="org.w3c.dom,org.xht 
mlrenderer.pdf";version="9.0.10",org.xhtmlrenderer.simple;uses:="java 
x.swing,org.w3c.dom,org.xhtmlrenderer.css.extend,org.xhtmlrenderer.cs 
s.sheet,org.xhtmlrenderer.extend,org.xhtmlrenderer.layout,org.xhtmlre 
nderer.swing,org.xhtmlrenderer.util";version="9.0.10" 
Bundle-Name: Flying Saucer PDF Rendering 
Bundle-Version: 9.0.10.SNAPSHOT 
Bundle-ClassPath: .,itext-2.1.7.jar 
Embed-Transitive: true 
Created-By: Apache Maven Bundle Plugin 
Build-Jdk: 1.8.0_102 

但iText库没有投入所产生的JAR,即清单指向的捆绑,类路径条目的遗漏的内容。

此外,我试图创建一个全新的工件,它声明对原始飞碟-PD神器的依赖关系,并将它重新打包为一个OSGi包,在StackOverflow中流动此答案[2],并且工作正常。

我可以看到的唯一真正的区别是包装类型'包'与'瓶'。但是我不能在原始飞碟-PD神器中改变这种包装类型,因为所有东西都需要保持原样用于非OSGi用途,以便将接受的更改作为推送请求接受。

你们知道这个嵌入maven-bundle-plugin的依赖关系是否可以与包装类型“jar”一起工作吗?还是需要包装类型'捆绑'?

我很感激任何回应和暗示,我可以尝试直接在原始工件中完成重新捆绑。

非常感谢。

问候 蒂莫Rohrberg

回答

2

有使用maven的插件捆绑两种方式。

第一种方式是使用

<extensions>true</extensions> and <packaging>bundle</packaging> 

在这种情况下,Maven的捆绑插件是负责所有的建设步骤和可能影响的jar文件的内容。

第二种方法是使用清单目标并在jar插件中添加清单。在这种情况下,maven bundle插件只能影响jar。它不能嵌入任何其他库或复制到外部私人类。

所以,如果你需要嵌入,那么唯一的办法就是改变包装。

所以我认为有两个解决方案不会太多地影响原始jar。

  1. 不嵌入和捆绑
  2. 在构建创建spearate模块来创建一个捆绑然后可附加到原来的罐子
安装依赖
相关问题