我有一个 Maven 项目,我正在使用 maven-release-plugin 来准备发布。
当我运行
mvn --batch-mode release:prepare
命令时,它会创建两个提交,如下所示
(HEAD -> 开发) [maven-release-plugin] 为下一步开发做准备 迭代
(标签: myapp-1.0.0) [maven-release-plugin] 准备发布 myapp-1.0.0
这会正确更新所有 pom 文件。
但是我的项目中有一些文本文件,其中有版本令牌。我正在寻找一种根据提交适当替换这些版本令牌的方法。
例如,
prepare release
提交应将令牌替换为1.0.0
,prepare for next development
应将令牌替换为1.0.1-SNAPSHOT
我已经检查了文档,但没有找到任何方法来做到这一点。如果有人对如何通过 maven-release-plugin 或在任何其他插件的帮助下实现这一目标有任何想法,请提出建议。
编辑:
即使我将文件放在资源目录中,这个问题也没有解决。我观察到的是,发布插件仅选择性地将
pom.xml
文件添加到提交中,而不是其他文件,即使它们被修改也会添加到发布插件推送的提交中。
让我澄清一下,我并不是在寻找源文件中的替换版本,而是在生成的工件中替换它。我们可以争论为什么非源文件中存在版本字段,但任何人都可以想到真实的场景。
作为一名开发人员,我希望 Maven 版本所做的发布提交应该准确,即它应该包含与该特定版本相关的所有更改。
正如khmarbaise所说:在各个文件中使用
${project.version}
,将它们放入资源目录中并使用过滤。
我可以使用 Maven 发布插件更新非 pom 文件中的版本。
maven-release-plugin
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<version>3.0.1</version>
<configuration>
<preparationGoals>resources:copy-resources@update-project-version scm:add -Dincludes=${target.file}</preparationGoals>
<checkModificationExcludes>${target.file}</checkModificationExcludes>
</configuration>
</plugin>
插件-2
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.7</version>
<configuration>
<delimiters>
<delimiter>@</delimiter>
</delimiters>
<useDefaultDelimiters>false</useDefaultDelimiters>
</configuration>
<executions>
<execution>
<id>update-project-version</id>
<phase>process-resources</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${project.basedir}</outputDirectory>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>${target.file}</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
<encoding>UTF-8</encoding>
</configuration>
</execution>
</executions>
</plugin>