【问题标题】:How to run apache fop with Java-11?如何使用 Java-11 运行 apache fop?
【发布时间】:2021-05-28 16:53:57
【问题描述】:

将 fop 和 Java11 与 Maven 和 Eclipse 一起使用,我可以从 xsl-fo 输入创建 PDF 文档。
但前提是我从 Eclipse 中启动程序。
我的 pom.xml 建议 Maven 将所有用于依赖项的 jar 文件复制到 lib 文件夹。准备从命令行运行。
当我尝试从命令行启动程序时,例如

java -p target/rutil-0.0.1-SNAPSHOT.jar;target/lib -m eu.ngong.rutil/eu.ngong.rutil.App

我明白了 启动层初始化时出错 java.lang.module.FindException:无法为 target\lib\batik-script-1.14.jar 派生模块描述符。 我可以在 pom.xml 中的 fop 依赖项中添加排除项,但只能看到下一条失败消息(两个模块中的相同包)等等。

如何像 Eclipse 一样从命令行启动我的程序? 我的目标是在夜间构建批处理运行中使用 fop。

您可能会找到我的程序here 的绝对最小版本。

【问题讨论】:

  • 没有解决您的问题,但您不能在模块路径上使用 batik-script,因为 JAR 声明了一个不包含自身的服务,并且模块系统对此表示反对 - 请参阅 this issue .
  • 可能最快的解决方法是不为您的应用程序使用模块系统,您应该能够使用-cp target/rutil-0.0.1-SNAPSHOT.jar;"target/lib/*"而不是-p ...从类路径启动它。
  • @NicolaiParlog 将所有内容移动到类路径将意味着摆脱module-info(不是模块化一个应用程序),对吗?为了继续前进,我有tried executing问题中的链接项目,模块路径所需的依赖项绝对最小,并且仍然能够与类路径中的其余部分一起执行。我能够看到共享示例的成功执行。您可能会在建议的方法中发现任何警告?

标签: java maven java-11 apache-fop java-module


【解决方案1】:

您可以将所有非模块化工件放在类路径中,并且不支持派生它们的模块信息。这些将主要被视为unnamed module

java --module-path target/rutil-0.0.1-SNAPSHOT.jar;target/lib/fop-2.6.jar \
     --class-path target/lib \
     --module eu.ngong.rutil/eu.ngong.rutil.App

我已在this answer 中对您面临的错误进行了解释。在使用模块路径上的所有其他工件的同时解决它的直接方法可能是破解 jar 以从 MANIFEST.MF 中删除条目。

【讨论】:

  • 对我有用,在 --class-path 的末尾添加星号 /*。
猜你喜欢
  • 1970-01-01
  • 2022-11-25
  • 1970-01-01
  • 2019-03-21
  • 2019-06-15
  • 2017-01-05
  • 2023-03-08
  • 2019-09-27
  • 1970-01-01
相关资源
最近更新 更多