一段时间以来,我一直在摸不着头脑,试图设置我的库以使用多版本 jar 来使用带有备份 java 8 实现的 java 9+ 功能。但是,仅我的项目的一个模块需要它。
我当前的模块 build.gradle 如下所示:
apply plugin: 'java'
apply plugin: 'java-library'
dependencies {
compile project(":common")
compile 'org.ow2.asm:asm:6.2'
compile 'org.ow2.asm:asm-util:6.2'
testCompile "junit:junit:$junit_version"
testCompileOnly "com.google.auto.service:auto-service:$autoservice_version"
java9Implementation files(sourceSets.main.output.classesDirs) { builtBy compileJava }
}
compileJava {
sourceCompatibility = 8
targetCompatibility = 8
options.compilerArgs.addAll(['--release', '8'])
}
compileJava9Java {
sourceCompatibility = 9
targetCompatibility = 9
options.compilerArgs.addAll(['--release', '9'])
}
sourceSets {
java9 {
java {
srcDirs = ['src/main/java9']
}
}
}
jar {
into('META-INF/versions/9') {
from sourceSets.java9.output
}
manifest {
attributes(
"Manifest-Version": "1.0",
"Multi-Release": true
)
}
}
然而,在 intellij 中刷新我的 build.gradle 让我遇到了这个错误:
Could not find method java9Implementation() for arguments [file collection] on object of type org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler.
我还应该注意这是在 gradle 4.8.1 上。