我正在使用带有模块插件的 Gradle (6.0.1)来使用 JDK 13从JPMS模块构建应用程序。
但是,即使应用了application
插件并对其进行了mainClassName
设置,它也不会在 中设置ModuleMainClass
属性module-info.class
,因此当我将其链接到独立的 JVM 并运行时,java -m mymodule
我会收到以下消息:
module mymodule does not have a ModuleMainClass attribute, use -m <module>/<main-class>
在引擎盖下挖掘它看起来模块插件根本不会改变 jar 任务,并且开箱即用的 gradle jar 任务实际上并不使用JDK 的jar
命令,它只是将所有内容压缩起来。
据我所知,设置ModuleMainClass
属性的唯一方法module-info.class
是使用 JDK 的 jar 命令,如下所示jar --main-class=CLASSNAME -C <classes dir>
:
除了编写我自己的 gradle 任务之外,有没有办法做到这一点?如果没有,有没有人有一个用调用 JDK 命令替换 gradle jar 任务的例子?
(请注意,这个问题不是关于Main-Class
在 jar 的 MANIFEST.MF 中设置 - 这很容易,但在调用时不受尊重java -m <modulename>
。)