javac returns "error: module not found: ini4j"

javac returns "error: module not found: ini4j"

我有一个小程序(目前有六个 *.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 运行 它时它可以工作,但是哄 Java 的方法=15=] 编译器无法接受它。

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

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

谢谢大家的帮助!

答案在评论区- Error: automatic module cannot be used with jlink: - Maven with JavaFX

The unfortunate thing about jlink is it can only create images when everything is an explicit module (i.e. has a module-info file). At least one of your dependencies (ini4j) is not an explicit module; see ? for more information. You have at least a few options:

(1) Modify/fork the dependency to be an explicit module,

(2) fallback to the classpath and package your application in a "fat" jar

(3) try jpackage (early-access, I doubt javafx-maven-plugin provides support yet)

就我个人而言,我建议选择选项 #2。使用任何适当的 maven/gradle 插件将您的应用程序打包为可执行 JAR。现在和以后处理应用程序及其依赖项会更容易。

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

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

还修复了一些错误