我正在尝试将gitflow-helper-maven-plugin
扩展用于我的 Maven 构建。
${project.version}
因此,我想配置我的项目,以便在构建发布版本时运行一些额外的步骤,并在编译 SNAPSHOT 时跳过它们,但是如果包含,我找不到启用配置文件的方法-SNAPSHOT
。
有什么建议吗?
我正在尝试将gitflow-helper-maven-plugin
扩展用于我的 Maven 构建。
${project.version}
因此,我想配置我的项目,以便在构建发布版本时运行一些额外的步骤,并在编译 SNAPSHOT 时跳过它们,但是如果包含,我找不到启用配置文件的方法-SNAPSHOT
。
有什么建议吗?
下面是一种可能的方法,即您始终可以if
在 Maven 构建中模拟语句:
buid-helper-maven-plugin
及其regex-property
目标来解析默认${project.version}
属性并创建一个${only.when.is.snapshot.used}
具有值true
或找到后缀${project.version}
的新属性。SNAPSHOT
maven-source-plugin
新的(动态)属性传递给它:在快照的情况下,它将具有值因此跳过执行,否则将具有将用作并且因此不跳过的值这次执行jar
skipSource
${only.when.is.snapshot.used}
true
${project.version}
false
maven-javadoc-plugin
使用其skip
选项配置同上上述方法的一个示例是:
<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>
也就是说,不需要配置文件,只有在使用非 SNAPSHOT 版本时才会启用此配置,动态且无需任何进一步配置(命令行选项或任何其他配置)。
作为一个侧面提醒,您还可以查看maven-release-plugin
,它只会在执行发布时有效地调用源代码和 javadoc 插件,而不会增加上述方法的(次要)复杂性。
否则,您可以简单地使用来自Maven Super POM的默认配置文件,该配置文件实际上会调用相同的 source 和 javadoc 插件,并且可以通过performRelease
设置为 value的属性激活true
。也就是说,在任何 Maven 项目中,您都可以调用以下内容:
mvn clean package -DperformRelease=true
或者
mvn clean package -Prelease-profile
您将自动受益于默认的超级配置文件并生成源代码和 javadoc jar,尽管这种方法应该作为最后一个选项使用,因为在未来的版本中可能会从超级 pom 中删除配置文件。
https://www.mojohaus.org/versions-maven-plugin/examples/use-releases.html
使用目标mvn versions:use-releases
我会建议你另一种解决方案。
为什么不在配置文件中设置版本而不是在版本上决定配置文件激活?像这儿:
<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>