Java 是模块描述符';s main 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

在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复制回分解的模块,并在添加的主类属性正常工作的情况下执行:
java-p-m简单。模块
而不是:
java-p-m simple.module/simple.module.Runner

有没有理由不能在module-info.java中声明一个主类?
为什么没有javac选项来设置模块描述符中的主类?

我有点困惑,您是否打算在一个JAR中有多个主类来运行它们,而不在终端中显式指定。否,我只想将一个类设置为主类文件。jmod工具还可以使用
--main class
设置主类。我有点困惑,您是否打算在一个JAR中有多个主类来运行它们,而不在终端中显式指定。否,我只想将一个类设置为主类文件。jmod工具还可以使用
--main class