Debian环境下Github源码构建Axelor失败:JVM版本不兼容求助
解决Axelor构建JVM版本不匹配问题
核心问题
:modules:axelor-supplier-portal模块指定JDK8编译,当前环境使用JDK11,导致依赖变体不匹配,war任务无法解析依赖。
可行解决方案
1. 单独为指定模块配置JDK8编译
修改项目根目录的build.gradle,添加子模块专属编译配置:
subprojects { if (project.name == 'axelor-supplier-portal') { tasks.withType(JavaCompile) { sourceCompatibility = '1.8' targetCompatibility = '1.8' // 替换为你的本地JDK8路径 options.forkOptions.javaHome = file('/usr/lib/jvm/java-8-openjdk-amd64') } // 若模块包含测试任务,同步指定JDK8 tasks.withType(Test) { javaLauncher = javaToolchains.launcherFor { languageVersion = JavaLanguageVersion.of(8) } } } }
或者直接修改modules/axelor-supplier-portal/build.gradle:
java { sourceCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8 } tasks.withType(JavaCompile) { options.fork = true options.forkOptions.javaHome = file('/path/to/your/jdk8') }
2. 移除不需要的模块(如果业务允许)
如果你的场景不需要供应商门户模块,直接在根目录settings.gradle中注释/删除对应的模块引用:
// include ':modules:axelor-supplier-portal'
之后重新执行构建命令。
3. 用Gradle工具链统一管理多版本JDK
若Gradle版本≥6.7,可通过工具链自动适配不同模块的JDK需求,无需手动指定路径:
// 根build.gradle全局配置 java { toolchain { languageVersion = JavaLanguageVersion.of(11) } } subprojects { if (project.name == 'axelor-supplier-portal') { java { toolchain { languageVersion = JavaLanguageVersion.of(8) } } } }
Gradle会自动检测本地JDK,若缺失可配置自动下载(需开启对应权限)。
4. 临时切换全局JDK版本构建
如果整个项目可兼容JDK8,临时切换环境变量后重新构建:
# Linux/macOS export JAVA_HOME=/path/to/jdk8 ./gradlew -x test build # Windows(PowerShell) $env:JAVA_HOME = "C:\path\to\jdk8" ./gradlew -x test build
内容的提问来源于stack exchange,提问作者Richard Andrew Slabbert
相关产品推荐
相关产品推荐

