【问题标题】:Filter Snapshot Version过滤器快照版本
【发布时间】:2018-10-29 08:58:29
【问题描述】:

我正在使用 jenkins、gitlab 和 nexus 进行 maven 项目。我可以在不使用 maven 帮助插件的情况下编写脚本来获取快照版本吗?

<version>0.0.1-SNAPSHOT</version>

我需要这样的输出。

0.0.1-SNAPSHOT

【问题讨论】:

  • 不清楚您真正在寻找什么以及您卡在哪里。你能详细说明你到底想做什么吗?只要是开发环境,我认为使用 SNAPSHOT 版本没有问题。
  • 实际要求是编写一个shell命令来获取pom版本属性的输出。它应该将 linux shell 显示为 0.0.1-SNAPSHOT
  • 我使用了 grep 命令。 cat pom.xml | grep "SNAPSHOT"。输出为&lt;version&gt;0.0.1-SNAPSHOT&lt;/version&gt;。现在我想从这个输出中删除&lt;version&gt;

标签: linux bash maven jenkins nexus


【解决方案1】:

如果你的 maven POM 文件看起来像这样

cat config.pom
<project>
  <version>0.0.1-SNAPSHOT</version>
</project>

你应该使用像xmlstarlet这样的XML感知解析工具(而不是像sedawk这样的面向文本的工具)来提取版本字符串:

xmlstarlet sel -t -v "project/version" -n config.pom

-t:模板
-v:提取xpath的值project/version
-n:添加新行

【讨论】:

  • 正确的轨道。但 pom.xml 通常有一个默认命名空间。考虑一下就好了。
  • @Kent 正确,选项-N 会有所帮助。鉴于 OP 的示例,我无法设置它...
【解决方案2】:

这是无需任何其他工具的方式:

grep -ri "<version>" /tmp/config.pom |head -n 1 |sed -e 's/^[ \t]*<version>\([^<]*\)<.*$/\1/'

你只需要适应 /tmp/config.pom 路径。

【讨论】:

  • without any further tools,但这很脆弱。除了处理带有正则表达式问题的 XML 之外,为什么要使用cat file?为什么grep | sed?如果一个 pom 有(通常有)多个 &lt;version&gt; 元素怎么办?
  • cat,然后 grep 只是为了便于阅读,但可以简化为 grep -r。如果有多个 标签则为真;它很脆弱。在这个版本中,我们可以添加一个 head 指令,假设它将是项目的 Version 将是第一次出现,但它不是 100% 保证。我因此更新了我的答案。
  • cat pom.xml |grep -i "&lt;version&gt;" |sed -e 's/^[ \t]*&lt;version&gt;\([^&lt;]*\)&lt;.*$/\1/' | awk '{print $1; exit}' 我使用了awk 命令,得到了预期的输出。 0.0.1-SNAPSHOT
  • 你不需要 awk,在 sed 指令之后。
猜你喜欢
  • 1970-01-01
  • 2021-06-10
  • 2018-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-11
  • 1970-01-01
相关资源
最近更新 更多