You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot Gradle构建失败(Heroku部署):Java版本兼容问题

Spring Boot 3.0.1部署Heroku时Gradle构建失败解决方案

问题核心

本地使用JDK 17开发Spring Boot 3.0.1应用,部署至Heroku时Gradle构建失败,报错核心原因是Heroku默认使用Java 8环境,而Spring Boot 3.0.1的Gradle插件仅兼容Java 17,导致依赖解析不匹配。

报错信息

remote:        A problem occurred configuring root project 'demo'.
remote:        > Could not resolve all files for configuration ':classpath'.
remote:           > Could not resolve org.springframework.boot:spring-boot-gradle-plugin:3.0.1.
remote:             Required by:
remote:                 project : > org.springframework.boot:org.springframework.boot.gradle.plugin:3.0.1
remote:              > No matching variant of org.springframework.boot:spring-boot-gradle-plugin:3.0.1 was found. The consumer was configured to find a runtime of a library compatible with Java 8, packaged as a jar, and its dependencies declared externally, as well as attribute 'org.gradle.plugin.api-version' with value '7.6' but:
remote:                  - Variant 'apiElements' capability org.springframework.boot:spring-boot-gradle-plugin:3.0.1 declares a library, packaged as a jar, and its dependencies declared externally:
remote:                      - Incompatible because this component declares an API of a component compatible with Java 17 and the consumer needed a runtime of a component compatible with Java 8
remote:                      - Other compatible attribute:
remote:                          - Doesn't say anything about org.gradle.plugin.api-version (required '7.6')
remote:                  - Variant 'javadocElements' capability org.springframework.boot:spring-boot-gradle-plugin:3.0.1 declares a runtime of a component, and its dependencies declared externally:
remote:                      - Incompatible because this component declares documentation and the consumer needed a library
remote:                      - Other compatible attributes:
remote:                          - Doesn't say anything about its target Java version (required compatibility with Java 8)
remote:                          - Doesn't say anything about its elements (required them packaged as a jar)
remote:                          - Doesn't say anything about org.gradle.plugin.api-version (required '7.6')
remote:                  - Variant 'mavenOptionalApiElements' capability org.springframework.boot:spring-boot-gradle-plugin-maven-optional:3.0.1 declares a library, packaged as a jar, and its dependencies declared externally:
remote:                      - Incompatible because this component declares an API of a component compatible with Java 17 and the consumer needed a runtime of a component compatible with Java 8
remote:                      - Other compatible attribute:
remote:                          - Doesn't say anything about org.gradle.plugin.api-version (required '7.6')
remote:                  - Variant 'mavenOptionalRuntimeElements' capability org.springframework.boot:spring-boot-gradle-plugin-maven-optional:3.0.1 declares a runtime of a library, packaged as a jar, and its dependencies declared externally:
remote:                      - Incompatible because this component declares a component compatible with Java 17 and the consumer needed a component compatible with Java 8
remote:                      - Other compatible attribute:
remote:                          - Doesn't say anything about org.gradle.plugin.api-version (required '7.6')
remote:                  - Variant 'runtimeElements' capability org.springframework.boot:spring-boot-gradle-plugin:3.0.1 declares a runtime of a library, packaged as a jar, and its dependencies declared externally:
remote:                      - Incompatible because this component declares a component compatible with Java 17 and the consumer needed a component compatible with Java 8
remote:                      - Other compatible attribute:
remote:                          - Doesn't say anything about org.gradle.plugin.api-version (required '7.6')
remote:                  - Variant 'sourcesElements' capability org.springframework.boot:spring-boot-gradle-plugin:3.0.1 declares a runtime of a component, and its dependencies declared externally:
remote:                      - Incompatible because this component declares documentation and the consumer needed a library
remote:                      - Other compatible attributes:
remote:                          - Doesn't say anything about its target Java version (required compatibility with Java 8)
remote:                          - Doesn't say anything about its elements (required them packaged as a jar)
remote:                          - Doesn't say anything about org.gradle.plugin.api-version (required '7.6')

项目build.gradle配置

plugins {
    id 'java-library'
    id 'org.springframework.boot' version '3.0.1'
    id 'io.spring.dependency-management' version '1.1.0'
}

group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '17'


repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    implementation 'org.springframework.boot:spring-boot-starter-validation'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    compileOnly 'org.projectlombok:lombok'
    runtimeOnly 'org.postgresql:postgresql'
    annotationProcessor 'org.projectlombok:lombok'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    implementation group: 'com.opencsv', name: 'opencsv', version: '5.7.1'
    implementation group: 'org.modelmapper', name: 'modelmapper', version: '3.1.1'

}

tasks.named('test') {
    useJUnitPlatform()
}

解决方案

1. 强制Heroku使用Java 17

在项目根目录创建system.properties文件,添加以下内容:

java.runtime.version=17

Heroku会读取该文件,使用指定的Java版本完成构建和应用运行。

2. 确认Gradle配置的Java版本一致性

你的build.gradle中已设置sourceCompatibility = '17',保留该配置以确保编译时遵循Java 17语法规范。

3. 可选:指定Gradle版本(若仍有兼容问题)

如果Heroku默认使用的Gradle版本与本地不匹配,可在项目根目录创建gradle.properties文件,添加:

gradle.version=7.6

(报错中显示需要Gradle API版本7.6,指定后可避免版本不兼容问题)

原理说明

Spring Boot 3.x系列最低要求Java 17,而Heroku默认Java环境为Java 8。未指定Java版本时,Heroku会用Java 8去解析仅兼容Java 17的Spring Boot Gradle插件,导致依赖版本不匹配触发构建失败。通过system.properties指定Java 17后,构建环境与本地一致,即可解决依赖解析问题。

内容的提问来源于stack exchange,提问作者eko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 04:31:18