如何在构建版本不是-SNAPSHOT时启用maven配置文件?

时间:2016-08-24 14:45:09

标签: java maven maven-profiles maven-javadoc-plugin maven-source-plugin

我正在尝试为我的maven版本使用gitflow-helper-maven-plugin扩展名。

因此,我想配置我的项目,以便在构建发布版本时运行一些额外的步骤,并在编译SNAPSHOT版本时跳过它们,但如果${project.version}包含,我找不到启用配置文件的方法-SNAPSHOT

有什么建议吗?

3 个答案:

答案 0 :(得分:11)

下面是一种可能的方法,即如何在Maven构建中始终模拟if语句:

  • 使用buid-helper-maven-plugin及其regex-property目标来解析默认的${project.version}属性,并创建一个值为${only.when.is.snapshot.used}或{{1}的新true属性}如果找到${project.version}后缀。
  • 使用skipSource选项配置SNAPSHOT以使用特殊配置执行其maven-source-plugin目标,并将新的(动态)jar属性传递给它:如果是快照它将具有值${only.when.is.snapshot.used}因此跳过执行,否则将具有将被用作true的值${project.version},因此不会跳过此执行
  • 使用skip选项
  • false配置与上述相同的内容

上述方法的一个示例是:

maven-javadoc-plugin

也就是说,不需要配置文件,只有在使用非SNAPSHOT版本时才会启用此配置,动态且无需任何进一步配置(命令行选项或任何其他)。

作为一个提醒,您还可以查看<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>build-helper-maven-plugin</artifactId> <version>1.10</version> <executions> <execution> <!-- sets the only.when.is.snapshot.used property to true if SNAPSHOT was used, to the project version otherwise --> <id>build-helper-regex-is-snapshot-used</id> <phase>validate</phase> <goals> <goal>regex-property</goal> </goals> <configuration> <name>only.when.is.snapshot.used</name> <value>${project.version}</value> <regex>.*-SNAPSHOT</regex> <replacement>true</replacement> <failIfNoMatch>false</failIfNoMatch> </configuration> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-source-plugin</artifactId> <version>3.0.1</version> <executions> <execution> <id>create-sources</id> <phase>package</phase> <goals> <goal>jar</goal> </goals> <configuration> <!-- skip when version is SNAPSHOT --> <skipSource>${only.when.is.snapshot.used}</skipSource> </configuration> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-javadoc-plugin</artifactId> <version>2.10.4</version> <executions> <execution> <id>create-javadoc</id> <phase>package</phase> <goals> <goal>jar</goal> </goals> <configuration> <!-- skip when version is SNAPSHOT --> <skip>${only.when.is.snapshot.used}</skip> </configuration> </execution> </executions> </plugin> ,它只会在performing发布时有效地调用源和javadoc插件,而不会增加上述方法的复杂性(次要)。

否则,您可以简单地使用来自Maven Super POM的默认配置文件,该配置文件实际上会调用相同的源和javadoc插件,并且可以通过设置为值{{1}的属性maven-release-plugin激活}}。也就是说,在任何Maven项目中,您都可以调用以下内容:

performRelease

true

您将自动受益于默认超级配置文件并生成源和javadoc jar,尽管此方法应作为最后一个选项使用,因为在将来的版本中可能会从超级pom中删除配置文件。

答案 1 :(得分:0)

我建议你另辟解决方案。

为什么不在配置文件中设置版本而不是在版本上做出关于配置文件激活的决定?像这里:

<version>${projectVersion}</version>

<profiles>
    <profile>
        <id>snapshot</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <properties>
            <projectVersion>1.0-SNAPSHOT</projectVersion>
        </properties>
    </profile>
    <profile>
        <id>release</id>
        <properties>
            <projectVersion>1.0-RELEASE</projectVersion>
        </properties>
    </profile>
</profiles>

答案 2 :(得分:0)