如何确保Gradle中的依赖与OpenJDK 15兼容?
适配OpenJDK 15的GraalVM Gradle项目解决方案
1. GraalVM JS 22.2.0 与OpenJDK 15兼容吗?
不兼容。GraalVM 22.2.x系列的最低要求Java版本是17,你遇到的错误里truffle-api-22.2.0.jar的module-info是用Java17编译的(class文件版本61.0),而OpenJDK15仅支持到版本59.0,因此这个版本的依赖无法在JDK15环境下运行。
2. 解决步骤
(1)降级GraalVM相关依赖版本
选择GraalVM 21.3.x系列,该版本最低支持Java11,完全兼容JDK15。修改build.gradle中的依赖配置:
dependencies { implementation 'org.mongodb:mongodb-driver-sync:4.7.1' // 替换为兼容JDK15的版本 implementation 'org.graalvm.js:js:21.3.2' implementation 'org.graalvm.js:js-scriptengine:21.3.2' implementation 'com.google.code.gson:gson:2.9.0' testImplementation 'junit:junit:4.13.2' // 取消注释并同步版本 implementation "org.graalvm.sdk:graal-sdk:21.3.2" implementation "org.graalvm.truffle:truffle-api:21.3.2" }
(2)强制锁定依赖版本(可选)
如果项目中有其他依赖间接引入了高版本的truffle-api或GraalVM组件,添加force参数强制锁定到兼容版本:
dependencies { // 其他依赖... implementation('org.graalvm.truffle:truffle-api:21.3.2') { force = true } implementation('org.graalvm.sdk:graal-sdk:21.3.2') { force = true } }
(3)验证依赖树
执行以下Gradle命令检查依赖,确保没有高版本组件混入:
./gradlew dependencyInsight --dependency truffle-api ./gradlew dependencyInsight --dependency graal-sdk
(4)调整编译配置(可选)
你的compileJava任务中添加了--module-path参数,如果项目不是模块化应用,可以考虑移除这部分配置,避免模块兼容性问题:
// 移除原有的compileJava配置,或保留但确保依赖模块兼容JDK15 // compileJava{ // doFirst { // options.compilerArgs = [ // '--module-path', classpath.asPath, // ] // } // }
3. 修改后的完整build.gradle配置
buildscript { repositories { mavenCentral() } } plugins{ id "java" id 'org.hidetake.ssh' version '2.7.1' } apply plugin: 'application' apply plugin: 'distribution' java { toolchain { languageVersion = JavaLanguageVersion.of(15) } } repositories { mavenCentral() } dependencies { implementation 'org.mongodb:mongodb-driver-sync:4.7.1' implementation 'org.graalvm.js:js:21.3.2' implementation 'org.graalvm.js:js-scriptengine:21.3.2' implementation 'com.google.code.gson:gson:2.9.0' testImplementation 'junit:junit:4.13.2' implementation "org.graalvm.sdk:graal-sdk:21.3.2" implementation "org.graalvm.truffle:truffle-api:21.3.2" } jar { archiveName ="mongojdbc${version}.jar" manifest { attributes 'Main-Class': 'com.wisecoders.dbschema.mongodb.JdbcDriver' attributes 'Class-Path': configurations.runtimeClasspath.files.collect { it.getName() }.join(' ') attributes 'Specification-Version': "$version" attributes 'Specification-Vendor': "Wise Coders" attributes 'Implementation-Vendor-Id': "dbschema.com" attributes 'Implementation-Vendor': "Wise Coders" attributes 'Implementation-Version': new Date().format( 'yyMMdd' ) } } task zip(type: Zip, dependsOn:['clean','jar']) { archiveFileName.set 'MongoDbJdbcDriver.zip' from configurations.runtimeClasspath.allArtifacts.files from configurations.runtimeClasspath from "build/libs" include "*.jar" }
内容的提问来源于stack exchange,提问作者DbSchema
相关产品推荐
相关产品推荐

