IronPdfEngine-Verbindungsfehler aus einer Fat JAR

This article was translated from English: Does it need improvement?
Translated
View the article in English

Wenn Ihre IronPDF for Java-Anwendung als Fat (Uber) JAR verpackt ist, kann der Client keine Verbindung zur internen Rendering-Engine herstellen. IronPdfEngine startet und hört auf dem korrekten Port, aber der Java-Client unternimmt 20 Verbindungsversuche und scheitert jedes Mal.

Failed to connect to IronPdfEngine after 20 attempts

Der Fehler entsteht durch das Zusammenführen aller Abhängigkeiten in eine einzige selbst erstellte schattierte (uber) JAR — zum Beispiel mit dem Maven Shade oder Gradle Shadow-Plugin. Überlappende Ressourcendateien aus den zusammengeführten Abhängigkeiten verhindern, dass der Java-Client den IronPdfEngine-Unterprozess erreicht: Die Engine startet und öffnet den erwarteten Port, aber der Client kann nie eine Verbindung herstellen und gibt nach 20 Versuchen auf. Wenn jede Abhängigkeit als eigene Datei auf dem Klassenpfad bleibt, wird der Konflikt vermieden.

Lösung

Bauen Sie das Projekt normal, kopieren Sie seine Abhängigkeiten in einen Ordner und starten Sie dann die App, indem Sie Java direkt auf diese Dateien verweisen, anstatt java -jar zu verwenden.

1. Bauen Sie das Projekt

mvn clean package
mvn clean package
SHELL

2. Kopieren Sie Laufzeit-Abhängigkeiten

Platzieren Sie jede Bibliothek in target/libs als separate JARs, was der Ansatz des Klassenpfads erfordert:

mvn dependency:copy-dependencies -DoutputDirectory=target/libs
mvn dependency:copy-dependencies -DoutputDirectory=target/libs
SHELL

3. Aus dem Klassenpfad ausführen

Starten Sie die App gegen den aufgeblähten Klassenpfad anstelle der Fat JAR. Ersetzen Sie com.example.Main durch Ihre tatsächliche Hauptklasse.

Windows:

java --add-opens java.base/java.nio=ALL-UNNAMED -cp "target/classes;target/libs/*" com.example.Main
java --add-opens java.base/java.nio=ALL-UNNAMED -cp "target/classes;target/libs/*" com.example.Main
SHELL

Linux / macOS:

java --add-opens java.base/java.nio=ALL-UNNAMED -cp "target/classes:target/libs/*" com.example.Main
java --add-opens java.base/java.nio=ALL-UNNAMED -cp "target/classes:target/libs/*" com.example.Main
SHELL

Der einzige Unterschied zwischen den beiden Befehlen ist der Klassenpfad-Trennzeichen: ein Semikolon (;) unter Windows, ein Doppelpunkt (:) unter Linux und macOS.

Debug-Tipps

  • Was nicht funktioniert: das Starten aus der Fat JAR startet IronPdfEngine erfolgreich, aber der Java-Client verbindet sich nie.
  • --add-opens allein ist nicht genug: das Hinzufügen des JVM-Flags während des Starts aus einer Fat JAR behebt den Verbindungsfehler nicht. Das Flag ist nur zusammen mit dem oben genannten Klassenpfad-Start relevant.
  • PDF/A-Versionsstrings: wenn Ihr Code eine PDF/A-Version als Zeichenfolgenargument übergibt, verwenden Sie PdfA2a, nicht PdfAVersions.PdfA2a.
Curtis Chau
Technischer Autor

Curtis Chau hat einen Bachelor-Abschluss in Informatik von der Carleton University und ist spezialisiert auf Frontend-Entwicklung mit Expertise in Node.js, TypeScript, JavaScript und React. Leidenschaftlich widmet er sich der Erstellung intuitiver und ästhetisch ansprechender Benutzerschnittstellen und arbeitet gerne mit modernen Frameworks sowie der Erstellung gut strukturierter, optisch ansprechender ...

Weiterlesen
Bereit anzufangen?
Version: 2026.6 gerade veröffentlicht
Still Scrolling Icon

Scrollst du immer noch?

Sie brauchen schnell einen Beweis?
Führen Sie eine Probe aus Sehen Sie zu, wie Ihr HTML-Code in eine PDF-Datei umgewandelt wird.