如何在存在 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,您可以取消任何下游作业。如果您的转移到生产作业在此构建作业的下游,这将解决您的问题。
最近,包含调试覆盖的代码已发布到生产环境中。代码标注清楚
// 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,您可以取消任何下游作业。如果您的转移到生产作业在此构建作业的下游,这将解决您的问题。