>java.lang.noclassdeffounderror文件

7nbnzgx9  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(401)

请不要提供解决方案使用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;
}

//业务代码(仅用于main.java类中的测试):

Class<Open_My_type_package.My_type> c = Open_My_type_package.My_type.class;

从以下结构开始:

THIRD_PARTY_MODULE >> Open_My_type_module-1.0.jar
src >> main >> java >> com >> X >> Access_My_type_package >> Main.java
src >> main >> java >> module-info.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

接下来,在执行之前,我将软件打包如下:

cd PRODUCTION_SOFTWARE
jar --create --verbose --file Access_My_type_module-1.0.jar --main-class com.X.Access_My_type_package.Main *

Package 似乎不起作用« 链接 » 在最终的可执行文件中打开\u my \u type \u module-1.0.jar,但我检查了打包软件的内部:

jar --file=Access_My_type_module-1.0.jar --describe-module

显示(一切正常):

Access_My_type_module jar:file://./Access_My_type_module-1.0.jar/!module-info.class
requires Open_My_type_module
requires java.base mandated
contains com.X.Access_My_type_package
main-class com.X.Access_My_type_package.Main

最后,执行失败 java.lang.NoClassDefFoundError 发件人:

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

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

q8l4jmvw

q8l4jmvw1#

解决方案(如下)的灵感来自https://sites.google.com/a/athaydes.com/renato-athaydes/posts/guidetojava9-compilejarrun.
对于java模块,使用 --module 而不是 -jar . 所以呢 java --module-path THIRD_PARTY_MODULE --module Access_My_type_module 很好用!假设: Access_My_type_module-1.0.jar 必须位于 THIRD_PARTY_MODULE 随着 Open_My_type_module-1.0.jar (为了简单起见)。总之, javaTHIRD_PARTY_MODULE 把所有需要的东西都录下来。请注意 --module 需要模块名(即, Access_My_type_module )而不是jar文件名!同时请注意 Access_My_type_module-1.0.jar 清单已在打包时设置了一个主类。。。如果不告诉我 java 它是执行时的主类。

相关问题