Java 是模块描述符';s main class属性仅适用于JAR文件?
在JPMS中,编译的模块描述符可以包含比其源更多的信息。 这意味着module-info.java没有定义主类的有效语法,但是module-info.class 您可以附上此信息 您可以在创建模块化jar时设置主类,如下所示:Java 是模块描述符';s main class属性仅适用于JAR文件?,java,java-platform-module-system,Java,Java Platform Module System,在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.newF
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复制回分解的模块,并在添加的主类属性正常工作的情况下执行:
java-p-m简单。模块
而不是:
java-p-m simple.module/simple.module.Runner
有没有理由不能在module-info.java中声明一个主类?
为什么没有javac选项来设置模块描述符中的主类?我有点困惑,您是否打算在一个JAR中有多个主类来运行它们,而不在终端中显式指定。否,我只想将一个类设置为主类文件。jmod工具还可以使用
--main class
设置主类。我有点困惑,您是否打算在一个JAR中有多个主类来运行它们,而不在终端中显式指定。否,我只想将一个类设置为主类文件。jmod工具还可以使用--main class