IronPdfEngine 从一个胖JAR连接失败

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

当您的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
SHELL

2. 复制运行时依赖项

将每个库单独放入target/libs中作为独立的JAR,这正是classpath方法所需的:

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

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
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

两个命令之间唯一的区别是classpath分隔符:在Windows上是分号(:)。

调试提示

  • 不起作用的方法:从胖JAR运行成功启动IronPdfEngine,但Java客户端始终无法连接。
  • --add-opens本身不够:在仍从胖JAR运行时添加JVM标志并不能解决连接问题。 该标志仅在上述classpath启动中起作用。
  • PDF/A版本字符串:如果代码将PDF/A版本作为字符串参数传递,请使用PdfAVersions.PdfA2a
Curtis Chau
技术作家

Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。

除了开发之外,Curtis 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。

准备开始了吗?
版本: 2026.6 刚刚发布
Still Scrolling Icon

还在滚动吗?

想快速获得证据?
运行示例看着你的HTML代码变成PDF文件。