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)
}
添加回答
举报