在测试阶段使用替代的 Maven 配置文件

Posted

技术标签:

【中文标题】在测试阶段使用替代的 Maven 配置文件【英文标题】:Use an alternative Maven Profile during test phase 【发布时间】:2010-10-26 08:25:28 【问题描述】:

我正在尝试从 Appfuse Archetype 开始构建应用程序,但遇到了一些奇怪的问题。有一次我想使用 hsqldb 进行自动化单元测试和集成测试,使用 mysql db 进行手动测试,这样我可以在需要时轻松操作数据,所以在测试期间自动切换配置文件会很好测试阶段。有没有办法做到这一点?

【问题讨论】:

【参考方案1】:

我不确定这是否正是您所要求的,但您可以执行以下操作来为您的 Maven 项目设置多个过滤器。

<filters>
  <filter>/your/path/filter-$env.properties</filter>
</filters>

这样您可以使用以下方法设置多个配置文件:

<profiles>
  <profile>
    <id>local</id>
    <properties>
      <env>local</env>
    </properties>
  </profile>
  <profile>
    <id>test</id>
    <properties>
      <env>test</env>
    </properties>
  </profile>
</profiles>

然后您可以使用相关属性文件运行构建:

mvn -P <profile id>

这需要属性文件位于:

/your/path/filter-local.properties
/your/path/filter-test.properties

【讨论】:

虽然这无疑是将属性文件从 maven 执行切换到 maven 执行的好方法,但我希望得到更精细的东西。我想简单地执行 mvn clean jetty:run 或类似的,然后用来自测试配置文件的占位符填充资源,然后,一旦测试通过,我想自动切换到另一个配置文件,然后用于替换占位符,然后启动码头服务器。基本上我想在另一个数据库配置上运行单元测试:-) 我明白了——所以您想为 Maven 生命周期的不同阶段使用不同的配置文件?我不确定这是否可能,但我们会看看是否有其他人回答。 您不能对同一运行的不同阶段使用不同的配置文件。自 2.0.3 天以来,我就遇到了这个问题。我用 mvn -PlocalTest clean package;mvn -PfullBuild clean package deploy 解决了这个问题。【参考方案2】:

不确定这是否对您有帮助,但您可以在 /src/test/resources 文件夹中指定替代资源文件,仅在运行测试时覆盖 /src/main/resources 中的资源文件。

我在这里定义了一个替代的 placeholders.properties 文件来指定测试阶段要使用的另一个数据库连接。

【讨论】:

以上是关于在测试阶段使用替代的 Maven 配置文件的主要内容,如果未能解决你的问题,请参考以下文章

maven配置多仓库镜像(转)

如何在 Maven 测试阶段生成 jacoco 报告

maven 安装配置

在 Maven 配置文件中使用带有 plexus-compiler-eclipse 插件的 JAXB

使用Maven自动打包配置文件生成开发环境,测试环境,生产环境

Maven 站点:在“部署”目标期间(在测试配置文件中)部署(使用不同的 url)?