如何使用 Gradle 设置 JPMS 模块的 ModuleMainClass 属性?
How can I set the ModuleMainClass attribute of a JPMS module using Gradle?
我正在使用 Gradle (6.0.1) 和 moduleplugin to build an application out of JPMS modules 使用 JDK 13.
然而,即使应用了 the application
plugin 并设置了 mainClassName
,它也不会在 module-info.class
中设置 ModuleMainClass
属性,所以当我将它链接到一个独立的JVM 和 运行 java -m mymodule
我收到此消息:
module mymodule does not have a ModuleMainClass attribute, use -m <module>/<main-class>
在引擎盖下挖掘看起来 moduleplugin 根本没有改变 jar 任务,开箱即用的 gradle jar 任务实际上并不使用 the JDK's jar
command,它只是压缩一切都在自己身上。
据我所知,在 module-info.class
中设置 ModuleMainClass
属性的唯一方法是使用 JDK 的 jar 命令:jar --main-class=CLASSNAME -C <classes dir>
.
除了编写我自己的 gradle 任务之外,有没有办法做到这一点?如果没有,有没有人有用调用 JDK 命令替换 gradle jar 任务的示例?
(请注意这个问题 而不是 关于在 jar 的 MANIFEST.MF 中设置 Main-Class
- 这很简单,但在调用 java -m <modulename>
.)
gradle 中的 jar
任务似乎没有正确构建 jar 以在 module-info.class
中包含 module-main-class
。事实上,它看起来根本不像是在调用 jar
命令,这有点误导。所以这是一个更新版本:
jar {
doLast {
project.exec {
workingDir destinationDirectory.get()
executable 'jar'
args '--update'
args '--file', archiveFileName.get()
args '--main-class', mainClassName
args '.'
}
}
}
Jar 命令语法部分取自此 tutorial。
这看起来很简陋,但它确实有效,希望有一天 Jar
任务将包括最后一部分。
我正在使用 Gradle (6.0.1) 和 moduleplugin to build an application out of JPMS modules 使用 JDK 13.
然而,即使应用了 the application
plugin 并设置了 mainClassName
,它也不会在 module-info.class
中设置 ModuleMainClass
属性,所以当我将它链接到一个独立的JVM 和 运行 java -m mymodule
我收到此消息:
module mymodule does not have a ModuleMainClass attribute, use -m <module>/<main-class>
在引擎盖下挖掘看起来 moduleplugin 根本没有改变 jar 任务,开箱即用的 gradle jar 任务实际上并不使用 the JDK's jar
command,它只是压缩一切都在自己身上。
据我所知,在 module-info.class
中设置 ModuleMainClass
属性的唯一方法是使用 JDK 的 jar 命令:jar --main-class=CLASSNAME -C <classes dir>
.
除了编写我自己的 gradle 任务之外,有没有办法做到这一点?如果没有,有没有人有用调用 JDK 命令替换 gradle jar 任务的示例?
(请注意这个问题 而不是 关于在 jar 的 MANIFEST.MF 中设置 Main-Class
- 这很简单,但在调用 java -m <modulename>
.)
gradle 中的 jar
任务似乎没有正确构建 jar 以在 module-info.class
中包含 module-main-class
。事实上,它看起来根本不像是在调用 jar
命令,这有点误导。所以这是一个更新版本:
jar {
doLast {
project.exec {
workingDir destinationDirectory.get()
executable 'jar'
args '--update'
args '--file', archiveFileName.get()
args '--main-class', mainClassName
args '.'
}
}
}
Jar 命令语法部分取自此 tutorial。
这看起来很简陋,但它确实有效,希望有一天 Jar
任务将包括最后一部分。