如何使用maven发布插件更新非pom文件中的版本

问题描述 投票:0回答:2

我有一个 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 版本所做的发布提交应该准确,即它应该包含与该特定版本相关的所有更改。

maven versioning git-commit maven-release-plugin
2个回答
0
投票

正如khmarbaise所说:在各个文件中使用

${project.version}
,将它们放入资源目录中并使用过滤。


0
投票

我可以使用 Maven 发布插件更新非 pom 文件中的版本。

  • 将 ${target.file} 放入 src/main/resources 并在 ${target.file} 中添加 @project.version@
  • 添加了 2 个插件 maven-release-pluginmaven-resources-plugin。详情在文末补充
  • 发布过程中
    • src/main/resources/${target.file} 复制到 ${project.basedir}
    • @project.version@ 替换为最新发布版本
    • pom 文件 ${project.basedir}/${target.file} 在 [skip ci][maven-release-plugin] 准备发布中提交

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>
© www.soinside.com 2019 - 2024. All rights reserved.