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,提问作者Денис Анд
相关产品推荐
相关产品推荐

