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

Spring Boot多模块GraalVM原生构建失败,如何指定模块构建?

解决多模块Spring Boot项目原生构建仅针对指定模块的问题

问题背景

你在多模块Maven项目中尝试用GraalVM构建Spring Boot原生可执行文件,执行./mvnw native:compile时失败,报错提示父模块缺少主类——这是因为Maven默认会对所有模块执行原生构建,而父模块和common模块并不包含可执行的主类。你的项目结构如下:

  • parent(继承spring-boot-starter-parent)
    • common
    • app-1(含主类)
    • app-2(含主类)

两种解决方法

方法一:命令行指定目标模块

直接在执行命令时,通过-pl参数指定要构建的app模块,同时用-am参数确保依赖的common模块也被正确构建:

./mvnw native:compile -pl app-1,app-2 -am
  • -pl:指定要构建的模块(多个模块用逗号分隔)
  • -am:自动构建指定模块依赖的所有模块(这里会先构建common,再处理app-1和app-2)

方法二:通过Maven插件配置全局控制

在父模块的pom.xml中,将原生插件默认设置为跳过执行,只在需要构建的子模块中开启:

  1. 父模块pom.xml中配置插件:
<build>
  <plugins>
    <plugin>
      <groupId>org.graalvm.buildtools</groupId>
      <artifactId>native-maven-plugin</artifactId>
      <version>0.9.22</version>
      <configuration>
        <!-- 默认跳过所有模块的原生构建 -->
        <skip>true</skip>
      </configuration>
    </plugin>
  </plugins>
</build>
  1. 在app-1和app-2的pom.xml中,覆盖父模块的配置,开启原生构建:
<build>
  <plugins>
    <plugin>
      <groupId>org.graalvm.buildtools</groupId>
      <artifactId>native-maven-plugin</artifactId>
      <configuration>
        <!-- 开启当前模块的原生构建 -->
        <skip>false</skip>
        <!-- 若Spring Boot未自动检测到主类,可手动指定 -->
        <!-- <mainClass>com.example.app1.Application</mainClass> -->
      </configuration>
    </plugin>
  </plugins>
</build>

之后直接执行./mvnw native:compile,Maven就只会对app-1和app-2执行原生构建了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 00:56:03