我有一个小程序(目前有6个*.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运行它时,它也能工作,但我无法用它来诱使javac编译器接受它。
我在Ubuntu19.04下使用openjdk (和javac) 11.0.3,如果这有帮助的话。
javac的底线:如何将这个非模块化的JAR文件编译成一个新的(模块化的,简单的)命令行编译器的程序?
解决方案:在注释和答案的帮助下,我找到了解决问题的方法,方法是将javac命令行修改为:
javac -g -d bin --module-path libs/ini4j-0.5.4.jar src/main/*.java现在它并没有给我编译时带来任何问题。
谢谢大家的帮助!
发布于 2019-06-27 22:10:54
答案在注释部分- Error: automatic module cannot be used with jlink: - Maven with JavaFX中给出。
jlink的不幸之处在于,它只能在所有东西都是显式模块(即有module-info文件)的情况下才能创建图像。至少有一个依赖项(ini4j)不是显式模块;请参见What is an automatic module?了解更多信息。你至少有几个选择: (1)将依赖项修改/叉为显式模块, (2)回到类路径,将应用程序打包到一个"fat“罐子中。 (3)尝试jpackage(早期访问,我怀疑javafx plugin提供的支持)。
就个人而言,我建议使用选项2,使用任何适当的maven/gradle插件将应用程序打包为可执行的JAR。它将更容易处理应用程序和它的依赖性现在和以后。
发布于 2020-04-03 20:42:24
https://stackoverflow.com/questions/56797669
复制相似问题