我正在尝试为我的maven版本使用gitflow-helper-maven-plugin
扩展名。
因此,我想配置我的项目,以便在构建发布版本时运行一些额外的步骤,并在编译SNAPSHOT版本时跳过它们,但如果${project.version}
包含,我找不到启用配置文件的方法-SNAPSHOT
。
有什么建议吗?
答案 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)
https://www.mojohaus.org/versions-maven-plugin/examples/use-releases.html
使用目标mvn versions:use-releases