IronPdfEngine-Verbindungsfehler aus einer Fat JAR
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
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
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
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
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
IronPdfEngineerfolgreich, aber der Java-Client verbindet sich nie. --add-opensallein 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, nichtPdfAVersions.PdfA2a.


