IronPdfEngine 从一个胖JAR连接失败
当您的IronPDF for Java应用程序打包为胖(uber) JAR时,客户端无法连接到内部渲染引擎。IronPdfEngine启动并监听正确的端口,但Java客户端尝试连接20次并每次都失败。
Failed to connect to IronPdfEngine after 20 attempts
失败源于将每个依赖项合并到一个自组装阴影(uber) JAR中——例如使用Maven Shade或Gradle Shadow插件。 合并的依赖项中的重叠资源文件阻止Java客户端到达IronPdfEngine子进程:引擎启动并打开预期的端口,但客户端永远无法连接,在20次重试后放弃。 保留每个依赖项作为classpath上的独立文件可以避免冲突。
解决方案
正常构建项目,将其依赖项复制到一个文件夹中,然后通过将Java直接指向那些文件而不是使用java -jar来启动应用程序。
1. 构建项目
mvn clean package
mvn clean package
2. 复制运行时依赖项
将每个库单独放入target/libs中作为独立的JAR,这正是classpath方法所需的:
mvn dependency:copy-dependencies -DoutputDirectory=target/libs
mvn dependency:copy-dependencies -DoutputDirectory=target/libs
3. 从Classpath运行
针对展开的classpath而不是胖JAR启动应用程序。 用您实际的主类替换com.example.Main。
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
两个命令之间唯一的区别是classpath分隔符:在Windows上是分号(:)。
调试提示
- 不起作用的方法:从胖JAR运行成功启动
IronPdfEngine,但Java客户端始终无法连接。 --add-opens本身不够:在仍从胖JAR运行时添加JVM标志并不能解决连接问题。 该标志仅在上述classpath启动中起作用。- PDF/A版本字符串:如果代码将PDF/A版本作为字符串参数传递,请使用
PdfAVersions.PdfA2a。


