我将Gradle(6.0.1)与moduleplugin结合使用,以使用JDK 13从JPMS modules中构建应用程序。
但是,即使应用了the application
plugin并设置了application
,它也不会在mainClassName
中设置ModuleMainClass
属性,因此当我将其链接到独立的JVM并运行module-info.class
时,我得到以下消息:
java -m mymodule
在幕后挖掘,看起来好像moduleplugin根本不会改变jar任务,开箱即用的gradle jar任务实际上并没有使用module mymodule does not have a ModuleMainClass attribute, use -m <module>/<main-class>
,它只是将所有内容自身压缩了。
据我所知,在the JDK's jar
command中设置jar
属性的唯一方法是使用JDK的jar命令:ModuleMainClass
。
除了编写我自己的gradle任务之外,还有其他方法吗?如果不是,是否有人举过一个用调用JDK命令的替换gradle jar任务的示例?
((请注意,关于在jar的MANIFEST.MF中设置module-info.class
的问题是[[not-很简单,但在调用jar --main-class=CLASSNAME -C <classes dir>
时不受尊重。)
Main-Class
任务无法正确完成构建jar的工作,以将java -m <modulename>
也包含在jar
中。实际上,它看起来根本不像调用module-main-class
命令,这有点误导。因此,这是执行此操作的更新版本: