2016-11-03 2 views
1

Ich bin erfolgreich mit dem Hinzufügen von OSGi spezifischen Metadaten zum MANIFEST des Flying-Saucer-PDF Maven-Artefakts. Es ist mir jedoch nicht möglich, die Abhängigkeiten und transitiven Abhängigkeiten dieses Artefakts in die erstellte JAR-Datei einzubetten.Einbettung in JAR mit maven-bundle-plugin funktioniert nicht

Ich war es, die Quellen aus dem fliegenden Untertasse-pdf von GitHub genommen [1] und fügte hinzu, die folgenden Anweisungen der pom.xml-Datei:

<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> 

Das Artefakt hat itext Version deklariert eine Abhängigkeit 2.1.7 in seiner ursprünglichen pom.xml, die ich nicht berührte. Ich habe mich auch nicht mit dem originalen Verpackungstyp des Artefakts beschäftigt, das Glas ist.

Leider ist dies nur ein Teil der Arbeit. Die MANIFEST.MF scheint richtig und enthält die erwarteten OSGi tags:

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 

Aber die itext Bibliothek setzen nicht in die resultierende JAR, das heißt die Bundle-ClassPath Eintrag der manifesten zeigt auf einen fehlenden Inhalt.

Zusätzlich habe ich versucht, ein völlig neues Artefakt zu erstellen, das eine Abhängigkeit zum originalen Flying-Saucer-PDF Artefakt erklärt und es als OSGi Bündel bündelt, das diese Antwort [2] hier auf StackOverflow und dies funktionierte.

Der einzige wirkliche Unterschied, den ich sehen kann, ist der Verpackungstyp 'Bündel' vs. 'Glas'. Aber ich kann diesen Verpackungstyp nicht im ursprünglichen Flying-Saucer-PDF-Artefakt ändern, da alles so bleiben muss, wie es für Nicht-OSGi-Anwendungen ist, um diese Änderung als Push-Anfrage zu akzeptieren.

Wissen Sie, ob diese Einbettungsabhängigkeiten mit dem maven-bundle-plugin tatsächlich mit der Verpackungsart 'jar' funktionieren können? Oder benötigt es den Verpackungstyp "Bundle"?

Ich freue mich über jede Antwort und einen Hinweis darauf, was ich versuchen könnte, um die Neubündelung direkt innerhalb des ursprünglichen Artefakts zu erreichen.

Vielen Dank.

Grüße Timo Rohrberg

Antwort

2

Es gibt zwei Möglichkeiten, um die Maven Bundle-Plugin zu verwenden.

Der erste Weg ist

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

In diesem Fall ist das Maven Plugin Bundle verantwortlich ist für die Nutzung von allen Schritten aufzubauen und die JAR-Datei Inhalte beeinflussen können.

Die zweite Möglichkeit besteht darin, das Manifestziel zu verwenden und das Manifest im jar-Plugin hinzuzufügen. In diesem Fall kann maven bundle plugin nur das jar beeinflussen. Es kann keine andere Bibliothek einbetten oder über externe private Klassen kopieren.

Also, wenn Sie Einbettung benötigen, dann ist die einzige Möglichkeit, die Verpackung zu ändern.

Also ich denke, es gibt zwei Lösungen, die das Originalglas nicht zu sehr beeinflussen.

  1. nicht einbetten Sie und die Abhängigkeiten installieren bündelt
  2. ein spearate Modul im Build erstellen ein Bündel zu erstellen, die dann zusätzlich
zum Original-Glas vorhanden ist
Verwandte Themen