基于多个文件的存在激活Maven配置文件

6
我想根据多个文件是否存在来激活一个配置文件。在下面的示例中,如果同时存在my.markeranother.marker两个文件,则激活该配置文件。
    <activation>
        <file>
            <exists>${basedir}/my.marker</exists>
            <exists>${basedir}/another.marker</exists>
        </file>
    </activation>

由于它不符合模式的要求,它无法工作。有没有一种方法可以在不使用命令行属性的情况下做到这一点?

3个回答

7

实际上,即使 Maven 3.2.2 解决了 MNG-4565 的问题,仍然无法检查多个文件的存在。这是因为 POM 模型不允许多个 file 或多个 exists 元素(https://issues.apache.org/jira/browse/MNG-5909)。即使在一个 file 元素中混合使用 existsmissing 也行不通(因为如果有 exists 元素,它将被视为唯一的元素,而同级别的 missing 元素将被忽略,https://issues.apache.org/jira/browse/MNG-5910)。


-1

虽然这不是解决您问题的方法,但您可以使用maven执行插件确保只有当两个文件存在时才成功运行配置文件。

例如,下面的片段将在任何使用配置文件requiresTwoFiles运行的maven目标(例如mvn -P requiresTwoFiles compile)中失败,除非src/main/javasrc/test/java都存在。

...
<profile>
    <id>requiresTwoFiles</id>           
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-enforcer-plugin</artifactId>
                <version>1.1</version>
                <executions>
                      <execution>
                        <id>enforce-files-exist</id>
                        <goals>
                          <goal>enforce</goal>
                        </goals>
                        <configuration>
                          <rules>
                            <requireFilesExist>
                              <files>
                                  <file>${basedir}/src/main/java</file>
                                  <file>${basedir}/src/test/java</file>
                              </files>
                            </requireFilesExist>
                          </rules>                              
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</profile>
...

-1

很遗憾,您现在无法这样做。有一个可以通过使用多个激活条件来解决您的问题,但它仍未解决。

编辑:Maven存在问题,所以您无法这样做。然而,从3.2.2版本开始,通过使用多个激活条件,它应该可以工作。

感谢Nicholas Daley指出这一点。


1
看起来在Maven v3.2.2中已经修复了。 - Nicholas Daley-Okoye

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接