请不要提供解决方案使用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模块的关键问题…请帮助欢迎!
1条答案
按热度按时间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
(为了简单起见)。总之,java
在THIRD_PARTY_MODULE
把所有需要的东西都录下来。请注意--module
需要模块名(即,Access_My_type_module
)而不是jar文件名!同时请注意Access_My_type_module-1.0.jar
清单已在打包时设置了一个主类。。。如果不告诉我java
它是执行时的主类。