Niepowodzenie polaczenia IronPdfEngine z duzego pliku JAR

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

Gdy aplikacja IronPDF for Java jest pakowana jako duzy (uber) JAR, klient nie moze polaczyc sie z wewnetrznym silnikiem renderowania. IronPdfEngine uruchamia sie i nasluchuje na poprawnym porcie, ale klient Java podejmuje 20 prób polaczenia i za kazdym razem ponosi porazke.

Failed to connect to IronPdfEngine after 20 attempts

Niepowodzenie wynika z polaczenia kazdej zaleznosci w jeden samodzielnie zmontowany cienisty (uber) JAR — na przyklad za pomoca dodatku Maven Shade lub Gradle Shadow. Nakladajace sie pliki zasobow z polaczonych zaleznosci uniemozliwiaja klientowi Java dotarcie do IronPdfEngine procesu podrzednego: silnik uruchamia sie i otwiera oczekiwany port, ale klient nigdy sie nie polaczy i rezygnuje po 20 probach. Utrzymanie kazdej zaleznosci jako oddzielnego pliku w sciezce klas eliminuje konflikt.

Rozwiązanie

Zbuduj projekt normalnie, skopiuj jego zaleznosci do folderu, a nastepnie uruchom aplikacje, kierujac Java bezposrednio na te pliki zamiast uzywac java -jar.

1. Zbuduj projekt

mvn clean package
mvn clean package
SHELL

2. Skopiuj zaleznosci podczas wykonywania

Umiesc kazda biblioteke w target/libs jako osobne pliki JAR, jak wymaga tego podejscie sciezki klas:

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

3. Uruchom ze sciezki klas

Uruchom aplikacje w odniesieniu do eksplodowanej sciezki klas zamiast do duzego pliku JAR. Zamien com.example.Main na swoja faktyczna glowna klase.

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

Jedyna roznica miedzy dwoma poleceniami jest separator sciezki klas: srednik (;) w systemie Windows, dwukropek (:) w systemach Linux i macOS.

Wskazówki dotyczące debugowania

  • Co nie dziala: uruchomienie z duzego pliku JAR poprawnie uruchamia IronPdfEngine, ale klient Java nigdy sie nie laczy.
  • --add-opens sam nie wystarczy: dodanie flagi JVM podczas uruchamiania z duzego pliku JAR nie naprawia problemu z polaczeniem. Flaga ma znaczenie tylko w przypadku powyzszego uruchomienia sciezki klas.
  • Ciagi wersji PDF/A: jezeli twoj kod przekazuje wersje PDF/A jako argument lancuchowy, uzyj PdfA2a, nie PdfAVersions.PdfA2a.
Curtis Chau
Autor tekstów technicznych

Curtis Chau posiada tytuł licencjata z informatyki (Uniwersytet Carleton) i specjalizuje się w front-endowym rozwoju, z ekspertką w Node.js, TypeScript, JavaScript i React. Pasjonuje się tworzeniem intuicyjnych i estetycznie przyjemnych interfejsów użytkownika, Curtis cieszy się pracą z nowoczesnymi frameworkami i tworzeniem dobrze zorganizowanych, atrakcyjnych wizualnie podrę...

Czytaj więcej
Gotowy, aby rozpocząć?
Wersja: 2026.6 właśnie wydany
Still Scrolling Icon

Wciąż przewijasz?

Czy chcesz szybko dowodu?
Uruchom przykład i zobacz, jak Twój kod HTML zamienia się w plik PDF.