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

Maven多模块项目执行release时无法找到login资源包的问题

问题原因分析

我一眼就看出问题出在Maven Release插件的工作方式上!当你运行mvn clean release:prepare release:perform时,这个插件会在你的项目target目录下创建一个临时的Git克隆副本(一般是target/checkout文件夹),所有的构建操作都是在这个临时副本里完成的。你在原项目目录下用脚本生成的login.properties根本没被复制到这个临时克隆里,所以测试代码在临时构建环境里找不到这个资源包,自然就抛出MissingResourceException了。

为什么constants资源包没问题?因为它本来就在Git仓库里,Release插件在checkout临时代码时会自动把它拉过来,测试自然能找到。

解决方案

最靠谱的办法是把生成login.properties的步骤整合到Maven的构建生命周期里,这样不管是本地构建还是Release插件的临时构建,都会自动执行这个步骤。我推荐用maven-antrun-plugin来实现,简单又可靠:

在core模块的pom.xml里加上这段插件配置:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-antrun-plugin</artifactId>
  <version>3.1.0</version>
  <executions>
    <execution>
      <id>generate-login-properties</id>
      <!-- 绑定到测试资源处理阶段,确保在测试类编译前生成好文件 -->
      <phase>process-test-resources</phase>
      <goals>
        <goal>run</goal>
      </goals>
      <configuration>
        <tasks>
          <!-- 直接生成到测试类输出目录,省得还要复制一次 -->
          <echo file="${project.build.testOutputDirectory}/login.properties">
userName=${bamboo_login_userName}
password=${bamboo_login_password}
          </echo>
        </tasks>
      </configuration>
    </execution>
  </executions>
</plugin>

这么配置之后,每次执行Maven构建(包括Release插件的临时构建),都会在process-test-resources阶段自动生成login.properties到core/target/test-classes目录,测试类就能顺利加载这个资源包了。

另外别忘了,在构建服务器上运行Release命令时,要确保bamboo_login_userName和bamboo_login_password这两个环境变量已经正确设置,这样插件才能读取到值生成正确的文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:45:57