我有一个小程序(目前有六个*.java
文件,以及ini4j-0.5.4.jar
库)。它可以在Eclipse上正常工作,但是我需要在没有图形功能的系统上编译并运行它,因此我为此构建了一个javac
命令,可以从项目目录中运行它:
javac -d bin -classpath libs/ini4j-0.5.4.jar src/main/*.java
运行时,它会产生两行:
error: module not found: ini4j
1 error
我离开Java编程已经有很多年了,而我只是赶上模块等的更改。看来这就是问题的根源:ini4j
文件是在模块成为事实之前编写的。我已经看到了暗示,有一种方法可以使模块化Java程序与非模块化组件一起工作,并且很明显,当我从Eclipse GUI运行它时,它就可以工作,但是可以哄骗javac
编译器来接受它躲避我。
如果有帮助,我正在Ubuntu 19.04下使用openjdk(和javac)11.0.3。
底线:如何使用javac
命令行编译器将此非模块化JAR文件编译为新的(模块化,简单)Java程序?
解决方案::借助注释和答案,我找到了一种方法来解决此问题,方法是将javac
命令行更改为此:
javac -g -d bin --module-path libs/ini4j-0.5.4.jar src/main/*.java
现在编译时没有任何问题。 :-)仍在尝试找出如何从命令行实际运行,但这是一个不同的主题。
谢谢大家的帮助!
答案 0 :(得分:1)
答案在评论部分中给出-Error: automatic module cannot be used with jlink: - Maven with JavaFX
关于
public function update(Request $request, Event $event, EventGallery $gallery)
的不幸之处在于,它只能在以下情况下创建图像: 一切都是一个显式模块(即具有jlink
文件)。在 您的依赖项中的至少一个(module-info
)不是显式模块;看到 What is an automatic module?了解更多信息。你至少有一个 几个选项:(1)将依赖项修改/派生为显式模块,
(2)退回到类路径并将应用程序打包在“胖” jar中
(3)尝试
ini4j
(早期访问,我怀疑javafx-maven-plugin 提供支持了
我个人建议使用选项#2。使用任何适当的maven / gradle插件将您的应用打包为可执行JAR。现在和以后,处理该应用程序及其依赖项将变得更加容易。
答案 1 :(得分:0)