检查Maven中的生命周期/阶段和文件是否存在并报告错误

时间:2012-12-20 15:55:24

标签: java maven ant build build-process

如果调用 integration-test 生命周期,我想在应用程序测试期间检查Maven中是否有来自属性文件的身份验证数据。

作为状态惯例,将认证数据提交给源树是不好的。标准maven方法在settings such as username and password should not be distributed along with the pom.xml描述。

但我不喜欢这种方法(我想要每个结帐设置,而不是每个dev-host !!)并希望在VCS中提供 src / text / resources / auth.properties.example (SVN / GIT / HG)作为示例,并且想要在Maven中检查是否存在 src / text / resources / auth.properties 的代码,这是每个开发人员拥有的(或者每个项目结账!) )但仅在调用集成测试阶段时(或集成测试阶段之后的任何其他阶段)。如果执行过任何先前阶段(例如编译测试) - 必须禁用此检查。

Maven 验证阶段旨在检查构建一致性(请参阅introduction-to-the-lifecycle)。但是没有任何阶段的检查!所以我使用预集成测试阶段。

我写了工作代码:

<?xml version="1.0" encoding="utf-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.mycompany.app</groupId>
  <artifactId>my-app</artifactId>
  <packaging>jar</packaging>
  <version>1.0</version>
  <name>my-app</name>

  <profiles>

    <profile>
      <id>existent.properties</id>
      <activation>
        <file>
          <missing>auth.properties</missing>
        </file>
      </activation>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-antrun-plugin</artifactId>
            <version>1.6</version>
            <executions>
              <execution>
                <phase>pre-integration-test</phase>
                <goals>
                  <goal>run</goal>
                </goals>
                <configuration>
                  <target>
                    <echo>In order to run integration-text life-cycle:</echo>
                    <echo>  1) Rename 'auth.properties.example' into 'auth.properties'.</echo>
                    <echo>  2) Fill 'auth.properties' with your own authentification data.</echo>
                    <fail message="Can't find 'auth.properties'."/>
                  </target>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>

  </profiles>

  <build>

    <plugins>

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-antrun-plugin</artifactId>
        <version>1.6</version>
        <executions>

          <execution>
            <id>test</id>
            <phase>test</phase>
            <goals>
              <goal>run</goal>
            </goals>
            <configuration>
              <target>
                <echo>JUnit tests!</echo>
              </target>
            </configuration>
          </execution>

          <execution>
            <id>integration-test</id>
            <phase>integration-test</phase>
            <goals>
              <goal>run</goal>
            </goals>
            <configuration>
              <target>
                <echo>Selenium tests!</echo>
              </target>
            </configuration>
          </execution>

        </executions>
      </plugin>

    </plugins>

  </build>

</project>

但是作为GNU Make guru我不喜欢上面的代码。我对吗?使用Maven是错误的吗?

1 个答案:

答案 0 :(得分:3)

你的方法很好(如果有点过度设计恕我直言 - 我只是把这种东西放在README /项目维基中;当试图读取它时,构建应该在没有文件的情况下失败)< / p>

您可能还想使用Enforcer目标而不是antrun:http://maven.apache.org/enforcer/enforcer-rules/requireFilesExist.html