如果源代码包含关键字/正则表达式,如何使maven构建失败

时间:2013-08-08 14:48:18

标签: maven

问题

如果源代码包含关键字/正则表达式,如何使maven构建失败?

加成

  • 能够指定要检查的路径
  • 能够指定要检查的路径“
    • “我想确保KEYWORD不包含在'main'资源中。我不关心'test'”
    • “我想确保KEYWORD不包含在'test'资源中。我不关心'main'”
    • ...
  • 能够指定执行测试的阶段(例如编译前)

解决方案

(根据目前的答案2013-09-26)

最佳解决方案似乎是@BaptisteMathus answer,它与maven完全集成,并且与平台无关。

在我的用例中,@ GregWhitaker answer是好的,因为它实现的成本更低我不关心平台独立性(< =所需命令可用于我所有的主人)。 下面的代码示例是基于此答案的解决方案,它禁止使用“FIXME”或“自动生成的方法存根”,但假设egrep可用。

另请参阅@MarkOConnor answer在“启用SONAR”项目中更清洁

<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>1.2.1</version>
            <executions>
                <execution>
                    <phase>process-sources</phase>
                    <configuration>
                        <executable>egrep</executable>
                        <successCodes>
                            <successCode>1</successCode>
                        </successCodes>
                        <arguments>
                            <argument>-rqm</argument>
                            <argument>1</argument>
                            <!-- Forbidden Keywords -->
                            <argument>FIXME|Auto-generated method stub</argument>
                            <!-- search path -->
                            <argument>src/main</argument>
                        </arguments>
                    </configuration>
                    <goals>
                        <goal>exec</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

4 个答案:

答案 0 :(得分:1)

我会创建一个小程序来运行这些检查,然后通过exec-maven-plugin执行它。如果在主资源中找到关键字,那么只返回一个非零返回码,这将导致插件失败。

答案 1 :(得分:1)

我认为taglist-maven-plugin正是你想要的。

答案 2 :(得分:1)

Sonar有一个taglist插件,允许您在注释块中搜索字符串并指定严重性处理。我假设你正在寻找...解析源代码本身可能需要一个自定义规则的工具,如checkstyle,我没有尝试过这种方法,但它是documented on the Sonar site

这可以与build breaker插件配合使用,当您的项目quality profile中违反警报条件时,该插件会失败。

答案 3 :(得分:1)

去SonarQube这样做并不是一个坏主意。

无论如何,如果有人想要使用仅限maven的解决方案,那么正确的方法是使用专用于使用maven构建“强制执行”的插件。使用exec-maven-plugin不是那个标准,当然也太依赖平台了。

此插件在逻辑上命名为maven-enforcer-plugin,而writing a custom enforcer rule实际上非常简单。