Java 9第三方模块&xAB ;链接 »;,怎么,什么时候-&燃气轮机;java.lang.NoClassDefFoundError

Java 9第三方模块&xAB ;链接 »;,怎么,什么时候-&燃气轮机;java.lang.NoClassDefFoundError,java,module,Java,Module,请不要使用Maven、Gradle提供解决方案…我只寻找CLI解决方案。也没有基于jlink的解决方案 给定Open_My_type_module-1.0.jar作为预先存在的编译Java 9模块: module Open_My_type_module { // module-info.java exports Open_My_type_package; opens Open_My_type_package; } 此模块中的代码仅声明以下类: 打开我的类型包。我的类型 我将此模

请不要使用Maven、Gradle提供解决方案…我只寻找CLI解决方案。也没有基于jlink的解决方案

给定
Open_My_type_module-1.0.jar作为预先存在的编译Java 9模块:

module Open_My_type_module { // module-info.java
    exports Open_My_type_package;
    opens Open_My_type_package;
}
此模块中的代码仅声明以下类:

打开我的类型包。我的类型

我将此模块重新使用到另一个模块中,如下所示:

module Access_My_type_module { // module-info.java
    requires Open_My_type_module;
}
cd PRODUCTION_SOFTWARE
jar --create --verbose --file Access_My_type_module-1.0.jar --main-class com.X.Access_My_type_package.Main *
//业务代码(仅用于Main.java类中的测试):

编译成功基于以下行:

javac -d PRODUCTION_SOFTWARE --module-path THIRD_PARTY_MODULE src/main/java/com/X/Access_My_type_package/Main.java src/main/java/module-info.java
接下来,在执行之前,我将软件打包如下:

module Access_My_type_module { // module-info.java
    requires Open_My_type_module;
}
cd PRODUCTION_SOFTWARE
jar --create --verbose --file Access_My_type_module-1.0.jar --main-class com.X.Access_My_type_package.Main *
打包似乎没有在最终可执行文件中打开“我的类型”模块-1.0.jar,但我检查了打包软件的内部:

jar --file=Access_My_type_module-1.0.jar --describe-module
显示(一切似乎正常):

最后,执行失败,原因是
java.lang.NoClassDefFoundError
来自:

java --module-path THIRD_PARTY_MODULE -jar Access_My_type_module-1.0.jar
我相信
--模块路径第三方\u模块
足以在执行时链接Open\u My\u type\u module-1.0.jar,但我一直感觉我的打包命令不稳定。除此之外,我确信我错过了关于Java9模块的一个关键问题…请帮助欢迎

解决方案(如下)的灵感来源于

对于Java模块,使用
--module
而不是
-jar
可以更好地控制执行。所以
java--模块路径第三方\模块--模块访问\我的\类型\模块
工作正常! 假设:
Access\u My\u type\u module-1.0.jar
必须与
Open\u My\u type\u module-1.0.jar
一起位于
第三方\u module
中(为简单起见)。简而言之,
java
THIRD\u PARTY\u MODULE
目录中找到所有需要的东西。 请注意,
--module
需要模块名称(即,
访问我的\类型\模块
)和 不是jar文件名! 还请注意,
Access\u My\u type\u module-1.0.jar
manifest在打包时已经用一个主类设置好了。。。如果不告诉
java
,在执行时哪个类是主类

java --module-path THIRD_PARTY_MODULE -jar Access_My_type_module-1.0.jar