【问题标题】:javac returns "error: module not found: ini4j"javac 返回“错误:找不到模块:ini4j”
【发布时间】:2020-04-04 04:42:24
【问题描述】:

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


解决方案:在 cmets 和答案的帮助下,我找到了解决问题的方法,将 javac 命令行更改为:

javac -g -d bin --module-path libs/ini4j-0.5.4.jar src/main/*.java

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

感谢大家的帮助!

【问题讨论】:

标签: java javac


【解决方案1】:

答案在 cmets 部分给出 - Error: automatic module cannot be used with jlink: - Maven with JavaFX

jlink 的不幸之处在于它只能在以下情况下创建图像 一切都是一个显式模块(即有一个module-info 文件)。在 您的至少一个依赖项(ini4j)不是显式模块;看 What is an automatic module?了解更多信息。你至少有一个 几个选项:

(1) 将依赖修改/分叉为显式模块,

(2) 回退到类路径并将您的应用程序打包到“胖”jar 中

(3) 尝试jpackage(早期访问,我怀疑 javafx-maven-plugin 提供支持)

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

【讨论】:

    【解决方案2】:

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

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

    还修复了一些错误

    【讨论】:

      猜你喜欢
      • 2020-02-27
      • 1970-01-01
      • 1970-01-01
      • 2016-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-30
      • 1970-01-01
      相关资源
      最近更新 更多