根据属性跳过插件的执行

Bor*_*ski 5 maven

在我的Maven构建中,我用它maven-processor-plugin来生成这样的JPA元模型

<plugin>
    <groupId>org.bsc.maven</groupId>
    <artifactId>maven-processor-plugin</artifactId>
    <version>2.2.4</version>
    <executions>
        <execution>
            <id>process</id>
            <goals>
                <goal>process</goal>
            </goals>
            <phase>generate-sources</phase>
            ....
        </execution>
</plugin>
Run Code Online (Sandbox Code Playgroud)

现在我想跳过基于属性的元模型生成,就像这样

$ mvn -Dspeed.up.build.from.eclipse=true
Run Code Online (Sandbox Code Playgroud)

不幸的是,maven-processor-plugin<skip>${speed.up.build.from.eclipse}</skip>不像某些插件那样支持配置标记.

我可以将我的插件放在配置文件中,然后根据我的属性激活它.但后来我需要以某种方式否定财产的价值......

所以我需要:

  • 如果没有设置属性,则执行插件
  • 如果设置了属性,则跳过插件的执行

是否有一些很好的方法可以实现它?如果有,怎么样?

Tun*_*aki 4

从文档来看,确实没有skip属性。

在这种情况下,一个可能的解决方案是使用将阶段设置为none禁用插件执行的技巧。您将定义 2 个配置文件

  • 一个 speed.up.build.from.eclipse将自定义属性设置maven-annotation-plugin.phase为的属性的存在激活none
  • 由于缺少该属性而激活的一个,该属性会将此自定义属性设置为您希望插件运行的实际阶段。

然后,您可以使用自定义属性作为插件配置中的阶段。

请注意,这是一个黑客行为,因为这是一个未记录的功能。


另一个解决方案(我实际上会推荐)是发出拉取请求以添加该功能。该代码托管在 GitHub 上,因此您可以轻松对其进行分叉、修补并发出拉取请求。同时,您可以使用自定义插件,当请求合并时,您可以删除自定义插件。