使用通配符存在文件时激活配置文件

时间:2013-07-16 10:26:11

标签: maven cucumber activation profiles

我使用

在父pom.xml Spring支持中激活
<activation>
    <file>
        <exists>src/main/resources/*beans.xml</exists>
    </file>
</activation>

这很好用。

当我尝试使用

激活配置文件中的CucumberJVM内容时
<activation>
    <file>
        <exists>src/test/resources/**/*.feature</exists>
    </file>
</activation>

然而,这拒绝工作。所以我想在这种情况下会忽略**通配符。

这是正常现象吗?有.feature文件存在时激活此配置文件的解决方法吗?

2 个答案:

答案 0 :(得分:8)

我真的很惊讶*beans.xml有效。

据我所知,文件激活时不支持通配符。可以在FileProfileActivator中找到基于<file>计算配置文件激活的源代码。核心逻辑是这样的:

String path = //<file><exists> ...

RegexBasedInterpolator interpolator = new RegexBasedInterpolator();
interpolator.addValueSource(/* ${basedir} suppert */)
interpolator.addValueSource( new MapBasedValueSource( context.getProjectProperties() ) );
interpolator.addValueSource( new MapBasedValueSource( context.getUserProperties() ) );
interpolator.addValueSource( new MapBasedValueSource( context.getSystemProperties() ) );
path = interpolator.interpolate( path, "" );
path = pathTranslator.alignToBaseDirectory( path, basedir );
File f = new File( path );
if ( !f.isAbsolute() ){
    return false;
}
boolean isActive = f.exists();

interpolate(...)alignToBaseDirectory(...)都没有处理通配符。

作为一种解决方法,您可以使用<activation><property>尝试一些gimick,但这需要使用shell脚本调用maven构建。

答案 1 :(得分:2)

在我们的项目中,我们使用下面的配置使用jar-plugin将所有测试打包为jar文件:

    <activation>
        <file>
            <exists>src/test/resources/com/companyname/platform/test/</exists>
        </file>
    </activation>

这是有效的,因为:

  • 我们使用archetypes创建样板代码
  • 大多数人只将资源文件放在根文件夹中
  • 配置文件激活适用于目录,至少在Maven 3.0.5