如何在存在 TODO 时阻止构建 Java 项目

How to prevent a Java project from building when TODO present

最近,包含调试覆盖的代码已发布到生产环境中。代码标注清楚

// TODO - Remove before releasing to production

但是我们没有将任何东西集成到 Maven 中来阻止项目的构建。我见过一个名为 Taglist 的 Maven 插件,它可以生成报告。但不会停止产生构建错误。

你们如何捕获调试代码并防止构建?

您可以在代码中配置 maven checkstyle plugin to fail the build if it find TODO comments


让 checkstyle 使构建失败

为了让 checkstyle 使构建失败,我遵循了类似问题的答案的建议: 他们发现他们需要添加配置 <violationSeverity>warning</violationSeverity>TodoComment 需要包含正则表达式格式 属性 使构建失败。

  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-checkstyle-plugin</artifactId>
    <version>2.17</version>
    <dependencies>
      <dependency>
        <groupId>com.puppycrawl.tools</groupId>
        <artifactId>checkstyle</artifactId>
        <version>7.5.1</version>
      </dependency>
    </dependencies>
    <executions>
      <execution>
        <id>validate</id>
        <phase>validate</phase>
        <goals>
          <goal>check</goal>
        </goals>
        <configuration>
          <logViolationsToConsole>true</logViolationsToConsole>
          <checkstyleRules>
          <module name="Checker">
            <module name="TreeWalker">
              <module name="TodoComment">
                <property name="format" value="(TODO)"/>
              </module>
            </module>
          </module>
          </checkstyleRules>
          <encoding>UTF-8</encoding>
          <consoleOutput>true</consoleOutput>
          <failOnViolation>true</failOnViolation>
          <failsOnError>true</failsOnError>
          <violationSeverity>warning</violationSeverity>
        </configuration>
      </execution>
    </executions>
  </plugin>

您还可以通过选择 pre-built checkstyle.xml

来包括更多检查

始终运行 checkstyle,但只有在配置文件被激活时才会失败-Pci-build

至运行:

mvn clean install -Pci-build

如果您使用的是 checkstyle,我希望您能从中获得更多价值,而不仅仅是检查 TODO 评论。看起来您不能配置多个检查样式配置,例如内联和 Jenkins 构建作业的 configLocation。但是如果你修改一个适合你的项目的checkstyle.xml,你可以修改你想要错误的模块的严重性:

<module name="TodoComment">
  <property name="severity" value="error"/>
  <property name="format" value="(TODO)|(FIXME)"/>
</module>

并且您可以使用 属性 在需要时打开故障,例如用于服务器构建但不是本地的 Maven pom.xml:

  <properties>
    <fail.on.error>false</fail.on.error>
  </properties>

  <profiles>
    <profile>
      <id>ci-build</id>
      <properties>
        <fail.on.error>true</fail.on.error>
      </properties>
    </profile>
  </profiles>

然后您可以在构建配置中将其用作 属性:

  <configuration>
     <configLocation>my_google_checks.xml</configLocation>
     <encoding>UTF-8</encoding>
     <consoleOutput>true</consoleOutput>
     <failOnViolation>false</failOnViolation>
     <failsOnError>${fail.on.error}</failsOnError>
     <violationSeverity>warning</violationSeverity>
  </configuration>

我将 failOnViolation 更改为 false 以允许在 checkstyle 配置中出现警告。我使用的是 google checkstyle 的修改版本,但如果你只想检查 TODO 或其他一些东西,你没有理由不能将相同的内容应用于内联配置。

当配置文件 "ci-build" 传递给 maven 时,可以启用这种在构建服务器上失败的方法。

当 ci-build 配置文件未发送时,checkstyle 仍然 运行s,但只生成报告。当然,您可以对其进行设置,使其在我们认为值得出错的任何样式问题上仍然失败。


只有 运行 checkstyle 如果配置文件是 activate -Pci-build

至运行:

mvn clean install -Pci-build

在这种情况下,您根本不希望 checkstyle 默认为 运行。所以我们只是在需要时激活 checkstyle 构建配置文件。

 <profiles>
    <profile>
      <id>ci-build</id>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-checkstyle-plugin</artifactId>
            <version>2.17</version>
            <dependencies>
              <dependency>
                <groupId>com.puppycrawl.tools</groupId>
                <artifactId>checkstyle</artifactId>
                <version>7.5.1</version>
              </dependency>
            </dependencies>
            <executions>
              <execution>
                <id>validate</id>
                <phase>validate</phase>
                <goals>
                  <goal>check</goal>
                </goals>
                <configuration>
                  <configLocation>my_google_checks.xml</configLocation>
                  <encoding>UTF-8</encoding>
                  <consoleOutput>true</consoleOutput>
                  <failOnViolation>true</failOnViolation>
                  <failsOnError>true</failsOnError>
                  <violationSeverity>warning</violationSeverity>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
  </profiles>

我正在使用 maven checkstyle 插件:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-checkstyle-plugin</artifactId>
    <version>2.15</version>
    <executions>
        <execution>
            <id>validate</id>
            <phase>validate</phase>
            <configuration>
                <configLocation>src/main/resources/config/checkstyle.xml</configLocation>
                <encoding>UTF-8</encoding>
                <consoleOutput>true</consoleOutput>
                <failsOnError>false</failsOnError>
                <linkXRef>false</linkXRef>
            </configuration>
            <goals>
                <goal>check</goal>
            </goals>
        </execution>
    </executions>
</plugin>

配置文件应包含一个 TodoComment 模块 这将防止构建带有 "TODO" 注释的代码。您可以对其进行配置,使其查看其他评论正则表达式,例如 "FIXME" 或其他内容。 Here你有更多的细节。

您可以使用以下插件来检测 TODO and/or FIXME(或您定义的任何其他注释文本)并在发现任何构建时将构建标记为不稳定或失败: Task Scanner Plugin

但是,此分析将在代码被拉下后执行,因此这取决于您的迁移到生产过程的设置方式。该插件允许您将构建作业标记为失败(一旦您将其添加为 post-构建步骤),然后如果检测到 TODO,您可以取消任何下游作业。如果您的转移到生产作业在此构建作业的下游,这将解决您的问题。