当前位置: 首页 > 知识库问答 >
问题:

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

唐啸
2023-03-14

如果调用integration-test Life-Cycle,我希望在Maven中检查属性文件中的身份验证数据是否由开发人员在应用程序测试期间提供。

按照通常做法,将身份验证数据提交到源树是不好的。在设置(如用户名和密码)中描述的标准maven方法不应与pom.xml一起分发。

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

用于检查构建一致性的Maven验证阶段(参见生命周期简介)。但是没有任何检查的阶段!!所以我使用了预集成测试阶段。

我编写工作代码:

<?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的大师,我不喜欢上面的代码。我说的对吗?是否错误地使用了Maven?

共有1个答案

谷梁宏恺
2023-03-14

您的方法很好(如果有点过度设计的IMHO-我会把这种东西放在自述文件/项目wiki中;当试图读取文件时,没有文件构建应该会失败)

您可能还希望使用Enforcer目标而不是Antrun:http://maven.apache.org/Enforcer/Enforcer-rules/requirefilesexist.html

 类似资料:
  • 如何在maven的默认生命周期中生成surefire报告。我们在teamcity设立了工作岗位,目标如下 这个作业运行所有junits,我想创建项目中运行的所有测试的HTML报告。我遇到了sure fire reports插件,但它只在站点阶段生成报告,而在默认的干净安装阶段不生成报告。 我如何生成报告默认生命周期 我尝试包括surefire报告插件,在测试阶段如下,但不工作

  • 这在我做项目的笔记本电脑上工作,而在另一台笔记本电脑上抛出一个错误。错误代码为 格式:或:[:]:.可用的生命周期阶段有:验证、初始化、生成源、过程源、生成资源、过程资源、编译、过程类、生成测试源、过程测试源、生成测试资源、过程测试资源、测试编译、过程测试类、测试、准备包、包、集成前测试、集成测试、集成后测试、验证、安装、部署、预清理、清理、清理后、站点前、站点后、站点部署。->[帮助1][ERR

  • 当我尝试安装maven时,我在intellij中收到此错误,尝试了此处提出的所有解决方案"https://stackoverflow.com/questions/5074063/maven-error-failure-to-transfer",但它不起作用。

  • 如何禁用Maven3默认生命周期中不需要的阶段? 例如,我希望、和阶段永远不会发生,并将我的构建日志从以下内容转变为: 变成这样:

  • 我已经用maven创建了一个java项目。在我的项目(src/main/resources下)中,有一些资源文件我想复制到目标/类中。 我在pom xml中添加了以下行: 当我运行mvn资源时:通过命令行获取的资源文件正在复制到目标/类中(因此生命周期中的资源阶段正在工作)。然而,当我在cmd中输入mvn install:install时,资源文件并没有被复制到目标/类中。 我得到: 生命周期中的

  • Flex应用程序的生命周期 虽然,您可以在不了解应用程序的生命周期阶段的情况下构建Flex应用程序,但了解基本机制是很好的。 事情发生的顺序。 它将帮助您配置功能,例如在运行时加载其他Flex应用程序,以及管理在运行时加载和卸载类库和资产的过程。 充分了解Flex应用程序生命周期将使您能够构建更好的应用程序并对其进行优化,因为您将知道在何处优化运行代码。 例如,如果您需要确保在预加载器期间运行某些