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

将exec-maven-plugin绑定到Maven阶段后执行报错求助

问题根源分析

这个问题的核心是Maven执行上下文的classpath差异,以及生命周期阶段执行顺序带来的资源加载问题:

  • 当你最初没有绑定exec-maven-plugin到任何生命周期阶段时,执行mvn exec:java会让Maven自动触发必要的前置阶段(比如process-resources),这个阶段会把src/main/resources下的配置文件复制到target/classes目录,Spring Boot应用会从classpath的这个目录加载配置,所以能正常解析${cnp.application.acronym}。
  • 当你添加了<execution>绑定到generate-resources阶段后,直接执行mvn exec:java时,Maven不会再自动触发process-resources等前置阶段——它只会直接运行exec:java目标,此时src/main/resources的配置文件还没被复制到classpath中,Spring Boot启动时自然找不到对应的配置项,抛出占位符解析失败的错误。
解决方案

根据你的需求,有几种可行的解决方式:

1. 执行时先触发资源处理阶段

如果你还是想通过mvn exec:java命令手动执行代码生成,可以先让Maven完成资源复制:

mvn process-resources exec:java

process-resources阶段会把src/main/resources的文件复制到classpath目录,确保Spring能加载到配置。

2. 给exec插件添加额外classpath

在插件的<configuration>中显式添加src/main/resources到classpath,这样即使没执行process-resources,Spring也能直接从源码目录加载配置:

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>exec-maven-plugin</artifactId>
  <executions>
    <execution>
      <id>codegeneration</id>
      <phase>generate-resources</phase>
      <goals><goal>java</goal></goals>
    </execution>
  </executions>
  <configuration>
    <mainClass>com.codegenerator.CodeGeneratorApplication</mainClass>
    <!-- 添加额外classpath元素 -->
    <additionalClasspathElements>
      <additionalClasspathElement>src/main/resources</additionalClasspathElement>
    </additionalClasspathElements>
  </configuration>
</plugin>

3. 通过生命周期阶段执行代码生成

既然你已经把代码生成绑定到了generate-resources阶段,推荐直接执行Maven的生命周期命令来触发它:

mvn generate-resources

Maven会自动执行generate-resources之前的所有必要阶段(包括process-resources),确保配置文件已准备好,代码生成任务能正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:36:23