我正在尝试创建一个可以更新多个 Maven pom 文件的自动发布脚本。目前,“发布脚本”是一个文本文件,其中包含说明和一些示例 sed 命令,这些示例假定旧版本号始终是唯一的。(当从1.8-SNAPSHOT
to更新时1.9-SNAPSHOT
,假定1.8-SNAPSHOT
pom 中任何地方的每次出现都引用该项目并且需要更新)
我想通过正确读取 XML 来识别需要更新的特定元素来使这更安全。因为生成的更改将提交到 git 存储库,所以我不希望对空格进行任何不必要的更改。
到目前为止,我已经想出了这个 XQuery 脚本
declare boundary-space preserve;
declare namespace mvn="http://maven.apache.org/POM/4.0.0";
declare variable $new_version external;
replace value of node //*[mvn:artifactId/text()="geowebcache"][mvn:groupId/text()="org.geowebcache"]/mvn:version with $new_version
我在 xqilla 中运行:
xqilla -i pom.xml -u -v new_version "TEST" test.xq
这会按预期更新版本号,但会去除大部分空白;这导致了一个丑陋和令人困惑的提交。
我不喜欢 xqilla 或 XQuery,但我想将依赖关系保持在最低限度。Ubuntu 12.04 的主要存储库中提供了一个几乎没有传递依赖的小包,这就是我正在寻找的东西。