问题描述
在JPMS中,已编译的模块描述符可以包含比其来源更多的信息。 这意味着module-info.java没有有效的语法来定义主类,但是module-info.class 可以附加此信息。
在创建时可以为模块化jar设置主类,如下所示:
jar --create --file out.jar --main-class simple.module.Runner $(find . -name "*.class")
使用反射API,可以检查已编译模块描述符的属性:
Path mdpath = FileSystems.newFileSystem(Path.of("out.jar")).getPath("module-info.class");
ModuleDescriptor md = ModuleDescriptor.read(Files.newInputStream(mdpath));
System.out.println(md.mainClass()); // Optional[simple.module.Runner]
还有一个用于创建模块描述符的生成器,可以在其中设置主类属性。 但是我看不到将这个对象序列化为module-info.class文件的方法。
ModuleDescriptor md = ModuleDescriptor.newModule("simple.module")
.mainClass("simple.module.Runner")
.build();
据我所知,java编译器无法创建具有'module main class'属性集的模块描述符。
可以将jar修改后的module-info.class复制回分解后的模块,然后执行该操作,并使添加的main-class属性起作用:
java -p . -m simple.module
代替:
java -p . -m simple.module/simple.module.Runner
有人为什么不能在module-info.java中声明一个主类吗? 为什么没有javac选项可用于在模块描述符中设置主类?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)