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