[英]How can I set the ModuleMainClass attribute of a JPMS module using Gradle?
我使用搖籃(6.0.1)與moduleplugin來構建的應用JPMS模塊使用JDK 13。
但是,即使application
了application
插件並設置了它的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 任務實際上並不使用JDK 的jar
命令,它只是將所有內容壓縮起來。
據我所知,在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 命令語法部分取自本教程。
這看起來很笨拙,但它有效,希望有一天Jar
任務將包含最后一部分。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.