2 回答

TA貢獻1840條經驗 獲得超5個贊
自 1.5.0 版起,Gradle Modules Plugin 現在支持此功能。
下面是一個工作代碼段:build.gradle
plugins {
id 'java'
id 'org.javamodularity.moduleplugin' version '1.5.0'
}
repositories {
mavenCentral()
}
dependencies {
compileOnly 'org.projectlombok:lombok:1.18.6'
}
modularity.mixedJavaRelease 8
好吧,我設法通過以下方式完成這項工作:
禁用org.javamodularity.moduleplugin
刪除自定義源代碼集(不是必需的)
添加自定義任務并將其設置為任務的類路徑(靈感來自此 Gradle 手冊compileModuleInfoJava--module-pathcompileJava)
以下是的完整源代碼:build.gradle
plugins {
id 'java'
}
repositories {
mavenCentral()
}
dependencies {
compileOnly 'org.projectlombok:lombok:1.18.6'
}
compileJava {
exclude 'module-info.java'
options.compilerArgs = ['--release', '8']
}
task compileModuleInfoJava(type: JavaCompile) {
classpath = files() // empty
source = 'src/main/java/module-info.java'
destinationDir = compileJava.destinationDir // same dir to see classes compiled by compileJava
doFirst {
options.compilerArgs = [
'--release', '9',
'--module-path', compileJava.classpath.asPath,
]
}
}
compileModuleInfoJava.dependsOn compileJava
classes.dependsOn compileModuleInfoJava
筆記:
它編譯 ??
我驗證了 JDK 9 格式(第 8 個字節→ v.53),而其他類是 JDK 8 格式(第 8 個字節→ v.52) ??
module-info.class
0x35
0x34
但是,禁用是不令人滿意的,因為這意味著測試將不再在模塊路徑上運行,等等。 ??
org.javamodularity.moduleplugin

TA貢獻1811條經驗 獲得超6個贊
我為此開發了一個Gradle插件:https://github.com/Glavo/module-info-compiler
我試過Gradle Modules插件,但是還有一些麻煩的問題,所以我開發了這個插件,一個專門用于編譯的編譯器。module-info.java
它不是通過調用javac來實現的。它是一個完整的編譯器,可以在Java 8上運行。它識別的語法,并根據它生成相應的文件。module-info.javamodule-info.class
它只檢查語法,實際上不檢查那些包,類或模塊,因此它可以在不配置任何模塊路徑的情況下工作。
這個Gradle插件已經為您處理了所有內容。對于包含 的 Java 8 項目,您只需要執行以下操作:module-info.java
plugins {
id("java")
id("org.glavo.compile-module-info-plugin") version "2.0"
}
tasks.compileJava {
options.release.set(8)
}
添加回答
舉報