如何将maven插件执行仅绑定到项目的Snapshot版本?

时间:2015-06-02 12:49:14

标签: git maven

我想要做的是每当我运行“mvn install”命令时,我需要一些插件来执行。具体来说,我需要执行声纳插件,以检查项目中是否存在任何关键问题。如果有,则构建将失败。

但是,我希望此插件仅在“开发”分支上执行。开发分支上的项目版本如下所示:1.0.5-SNAPSHOT。主分支上的项目版本:1.0.5

那么,我如何仅在开发分支上运行插件?我想,我可能会根据版本(仅限快照)执行此操作,但我不确定是否可能

2 个答案:

答案 0 :(得分:1)

开箱即用不支持您尝试执行的操作 - 根据您的项目<version/>无法自动触发插件。 (嗯,这不完全正确,但你必须成为插件的作者并为此编写自己的逻辑,如果你真的想要;但这只适用于你的插件)。

我建议创建Maven配置文件并通过命令行变量(-DmyParam)或通过指定配置文件的名称(-PmyDevProfile)来触发它。

请查看以下链接,以便更好地了解Maven个人资料:

答案 1 :(得分:1)

我认为您可以通过以下方式实现此行为。首先在构建中添加build-helper-maven-plugin插件(开头)。

<build>
  <plugins>
   <plugin>
    <groupId>org.codehaus.mojo</groupId>
      <artifactId>build-helper-maven-plugin</artifactId>
      <version>1.10</version>
      <executions>
        <execution>
          <id>bsh-property</id>
          <goals>
            <goal>bsh-property</goal>
          </goals>
          <configuration>
            <properties>
              <property>skip.sonar</property>
            </properties>
            <source>skip.sonar = project.getVersion().endsWith("-SNAPSHOT") ? false : true;</source>
          </configuration>
       </execution>
    </executions>
  </plugin>
</plugins>

bsh-property目标执行beanshell脚本,该脚本定义skip.sonar属性为true或false,具体取决于您的版本是否在最后有快照。

然后你可以使用sonar maven插件的skip属性。

<build>
    <plugins>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>sonar-maven-plugin</artifactId>
        <version>2.7.1</version>
        <executions>
          <execution>
          ...
          <configuration>
            <skip>${skip.sonar}</skip>
          </configuration>
      </plugin>
    </plugins>
  </build>