Maven插件基于先前插件执行的条件执行(maven-compiler-plugin)

时间:2016-01-01 01:04:20

标签: java maven

是否有可能在编译阶段根据maven-compiler-plugin是否实际检测到源更改并因此编译并生成新的类文件来有条件地执行目标?

我的用例是只在项目中有新的字节代码时才运行findbugs或jacoco插件。

目前,我通过将其挂钩到编译阶段无条件地运行findbugs:

    <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>findbugs-maven-plugin</artifactId>
        <executions>
            <execution>
                <id>findbugs-check-compile</id>
                <phase>compile</phase>
                <goals>
                    <goal>check</goal>
                </goals>
            </execution>
        </executions>
    </plugin>

但是,如果我反复执行&#34; mvn package&#34;我明白了:

[INFO] --- maven-compiler-plugin:3.3:compile (default-compile) @ my-prj ---
[INFO] Nothing to compile - all classes are up to date
[INFO] >>> findbugs-maven-plugin:3.0.1:check (findbugs-check-compile) > :findbugs @ my-prj >>>
[INFO] --- findbugs-maven-plugin:3.0.1:findbugs (findbugs) @ my-prj ---
[INFO] Fork Value is true
[INFO] Done FindBugs Analysis....

注意maven-compiler-plugin如何检测&#34;无需编译 - 所有类都是最新的&#34;。我只想执行findbugs:事后检查是否不是这种情况(或者等等,我想跳过&#34; findbugs:check&#34;如果情况确实如此,那就执行目标并没有任何改变。)

注意1:我了解基于OS /架构/系统属性等等的配置文件和条件激活,但我的理解是,这些是在maven启动时提前评估的,并且在构建期间不能稍后更改。

注意2:我也看到了maven-ant-plugin,但我想完全跳过额外的插件执行。我不想添加antrun执行只是为了能够跳过findbugs。

注3:我需要能够为多个插件执行此操作,而不仅仅是findbugs

1 个答案:

答案 0 :(得分:1)

说实话,我不认为有办法做到这一点。只有那种解决方法,但不完全是您的确切需求(基于配置文件,profile1的属性设置,以便由另一个配置文件获取等)。

通常使用像jenkins这样的工具来实现接近这一点的东西,你可以在其中设置基本工作,例如,如果成功或完成或者看到正在生成的内容,请执行包(编译),然后激活后期构建作业以执行发现错误。