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

Windows环境下Spring Boot 3.4.4+Maven构建Cloud Native镜像失败求助

问题

已按Spring Boot官方文档配置POM文件,安装了GraalVM及Native Image,Docker已安装并处于Linux容器模式。执行命令mvn -Pnative spring-boot:build-image时构建失败,报错信息如下:

[INFO] --- spring-boot:3.4.4:build-image (default-cli) @ sms-sender-service ---
[INFO] Building image 'docker.io/library/my-service:0.0.1-SNAPSHOT'
[INFO]
[INFO]  > Pulling builder image 'docker.io/paketobuildpacks/builder-jammy-java-tiny:latest' 100%
[INFO]  > Pulled builder image 'paketobuildpacks/builder-jammy-java-tiny@sha256:cbd65c21bc53832bd81932f9f52e650b275a6aa82fd30702f523907385a4788e'
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  31.079 s
[INFO] Finished at: 2025-05-04T06:00:39+01:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:3.4.4:build-image (default-cli) on project my-service: Execution default-cli of goal org.springframework.boot:spring-boot-maven-plugin:3.4.4:build-image failed: OS must not be empty -> [Help 1]

附上POM.xml内容:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.4.4</version>
        <relativePath/>
    </parent>

    <groupId>com.my.service</groupId>
    <artifactId>my-service</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>my-service</name>
    <description>my-service</description>

    <properties>
        <java.version>21</java.version>

        <!-- Dependency Versions -->
        <aws.sdk.version>2.31.29</aws.sdk.version>
        <log4j2.aws.appenders.version>3.2.1</log4j2.aws.appenders.version>
        <jakarta.bind.version>4.0.2</jakarta.bind.version>
        <jaxb.runtime.version>4.0.5</jaxb.runtime.version>
        <mapstruct.version>1.6.3</mapstruct.version>
        <lombok.version>1.18.30</lombok.version>
        <lombok.mapstruct.binding.version>0.2.0</lombok.mapstruct.binding.version>
        <commons.lang3.version>3.17.0</commons.lang3.version>
        <commons.collections4.version>4.5.0</commons.collections4.version>
        <hibernate.validator.version>9.0.0.CR1</hibernate.validator.version>
        <jakarta.validation.api.version>3.1.1</jakarta.validation.api.version>
        <resilience4j.version>2.3.0</resilience4j.version>
        <springdoc.openapi.version>2.8.6</springdoc.openapi.version>
        <stubrunner.version>4.2.1</stubrunner.version>
        <rest.assured.version>5.5.1</rest.assured.version>

        <!-- Plugin Versions -->
        <maven.compiler.plugin.version>3.10.1</maven.compiler.plugin.version>
    </properties>

    <dependencies>
        <!-- Spring Boot Starters -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-webflux</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j2</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>   
      
    <build>
        <finalName>my-service</finalName>
        <plugins>
            <plugin>
                <groupId>org.graalvm.buildtools</groupId>
                <artifactId>native-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>${maven.compiler.plugin.version}</version>
                <configuration>
                    <annotationProcessorPaths>
                        <path>
                            <groupId>org.mapstruct</groupId>
                            <artifactId>mapstruct-processor</artifactId>
                            <version>${mapstruct.version}</version>
                        </path>
                        <path>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                            <version>${lombok.version}</version>
                        </path>
                        <path>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok-mapstruct-binding</artifactId>
                            <version>${lombok.mapstruct.binding.version}</version>
                        </path>
                    </annotationProcessorPaths>
                </configuration>
            </plugin>
        </plugins>
    </build>
    
</project>
解决方案

1. 显式指定构建镜像的操作系统

在spring-boot-maven-plugin配置中添加<image>节点,明确设置操作系统环境变量:

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <excludes>
            <exclude>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
            </exclude>
        </excludes>
        <image>
            <env>
                <BP_OS>linux</BP_OS>
                <BP_NATIVE_IMAGE>true</BP_NATIVE_IMAGE>
            </env>
        </image>
    </configuration>
</plugin>

2. 检查Docker环境配置

确认Docker服务正常运行,DOCKER_HOST等关键环境变量配置正确,避免构建过程中无法识别系统信息。

3. 清理Maven缓存后重新构建

执行以下命令清理缓存并重试构建:

mvn clean
mvn -Pnative spring-boot:build-image

4. 验证GraalVM版本兼容性

确保使用的GraalVM版本与Spring Boot 3.4.4兼容,推荐使用官方适配JDK 21的GraalVM版本。


内容的提问来源于stack exchange,提问作者Денис Анд

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 06:23:11