javac返回“错误:找不到模块:ini4j”

时间:2019-06-27 19:43:05

标签: java javac

我有一个小程序(目前有六个*.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

现在编译时没有任何问题。 :-)仍在尝试找出如何从命令行实际运行,但这是一个不同的主题。

谢谢大家的帮助!

2 个答案:

答案 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)

对于任何需要它的人,我已经移植了ini4j用作模块

可以在这里找到:https://github.com/codebbgr/cbbini4j

还修复了一些错误