使用文件存在忽略我的 Maven 配置文件中的激活(始终执行配置文件)

Posted

技术标签:

【中文标题】使用文件存在忽略我的 Maven 配置文件中的激活(始终执行配置文件)【英文标题】:Activation in my maven profile is ignored (profile always executed) using file exist 【发布时间】:2014-11-25 10:27:11 【问题描述】:

我正在使用基于我的 pom.xml 中存在的文件的激活。

但是,无论如何,我的个人资料总是被执行。

这是个人资料描述:

<profile>
    <id>copy</id>
    <activation>
        <file>
            <exists>file.xml</exists>
        </file>
    </activation>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-antrun-plugin</artifactId>
                <version>1.7</version>
                <executions>
                    <execution>
                        <id>copy-resources</id>
                        <phase>validate</phase>
                        <configuration>
                            <target name="copy and rename file">
                                <copy           file="$basedir/src/main/resources/application.$env.properties"  tofile="$basedir/src/main/fabric8/io.fabric8.system.properties" />
                            </target>
                        </configuration>
                        <goals>
                            <goal>run</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</profile>

我这样称呼我的个人资料: mvn package -Pcopy

但无论文件是否存在,配置文件都会被调用。 我做错了什么?

谢谢 罗曼。

【问题讨论】:

在@manouti's answer 之后,考虑激活配置文件而不是调用或执行它是有利的。这种匹配更好地符合 POM 的声明性性质,而不是强制性质。也许你已经意识到它已经通过 POM 激活了。 ;-) 【参考方案1】:

如果项目中存在文件,则在运行mvn 命令时不需要传递配置文件名称。将 -Pcopy 显式传递给命令将覆盖 POM 中的 activation,并始终激活此配置文件。

请参阅link 中的如何触发配置文件部分。

【讨论】:

以上是关于使用文件存在忽略我的 Maven 配置文件中的激活(始终执行配置文件)的主要内容,如果未能解决你的问题,请参考以下文章

Maven:配置文件激活取决于 localRepository 属性?

即使另一个配置文件被激活,如何保持 activeByDefault 的 Maven 配置文件处于活动状态?

maven打包的时候会忽略掉空文件夹,怎样配置让它不忽略

Maven - 根据属性激活子配置文件

Maven:如何根据子模块是不是包含文件来激活配置文件?

Maven:如果配置文件 B 未激活,则仅激活配置文件 A?