簡體   English   中英

如何使用 Gradle 設置 JPMS 模塊的 ModuleMainClass 屬性?

[英]How can I set the ModuleMainClass attribute of a JPMS module using Gradle?

我使用搖籃(6.0.1)與moduleplugin來構建的應用JPMS模塊使用JDK 13。

但是,即使applicationapplication插件並設置了它的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM