【问题标题】:Is there a maven plugin that can tell me the version of a single dependency?是否有一个 Maven 插件可以告诉我单个依赖项的版本?
【发布时间】:2021-03-28 07:35:16
【问题描述】:

我有更多的 git-repositories,而不是手动处理。因此,有时我想将它们视为单个存储库,例如在尝试确保叶依赖项的测试不会失败时,因为我们更新了上游依赖项的版本。编写脚本似乎是个好主意。

所以我尝试将每个存储库中所有 root-pom 的版本更改为未使用的版本,例如 latest-SNAPSHOT(简单的版本:set)。但是当我在这个项目的用法中想告诉他们使用依赖的 lastest_SNAPSHOT 版本时,我遇到了问题。

mvn version:set 需要旧版本的依赖项才能用新版本替换它。但这不是我在此上下文中拥有的信息,因此我需要探测 pom.xml 以获取它。

有没有一种简单的方法可以简单地问这样的问题:mvn xxx:getVersion -DgroupId=nnn -DartifactId=mmm 然后得到 1.2.3 作为答案?

我是否说过我是在 bash 中编写这个脚本作为一个完全的菜鸟,所以现在不是建议解析 mvn dependency:tree 或类似的结果的时候,除非你提供完整的脚本。

【问题讨论】:

  • 你不能用mojohaus.org/versions-maven-plugin/…之类的东西吗?
  • @JFabianMeier 据我了解,它需要 old_version 和我试图找到的那个版本。
  • 你需要旧版本做什么?您可以将(部分)依赖项更新为最新的 SNAPSHOT 版本。

标签: java bash git maven


【解决方案1】:

mvn 依赖:树 | grep "你的依赖" | awk “一些 awk 魔法”?

在分号上使用 AWK 拆分,最后 2 个标记将是版本和范围。

How to split a delimited string into an array in awk?

像这样:

awk '{split($0,a,":"); print a[2]}'

【讨论】:

【解决方案2】:

除非您愿意使用grep/awk/sed 或类似的东西,否则很难从 bash 脚本中使用 Maven。 Maven总是输出大量额外信息的原因,如Scanning for projects...BUILD SUCCESS

因此,如果您想使用 Maven 获取依赖项的版本(您应该这样做,因为依赖项解析很困难),您必须解析 Maven 的输出。

mvn dependency:list -DincludeGroupIds=nnn -DincludeArtifactIds=mmm -DoutputFile=version.out 创建的version.out 文件噪音最少。


The following files have been resolved:
   nnn:mmm:jar:1.2.3:compile

输出将包括几个额外的换行符和文本。不幸的是,我不知道有什么更好的方法来获得这个。

我认为将结果写入文件没有任何好处,因为您仍然会得到比您要求的更多的东西。所以只需grepsed 它: mvn dependency:list -DincludeGroupIds=nnn -DincludeArtifactIds=mmm | grep nnn:mmm | sed -r 's/.*:.*:.*:(.*):.*/\1/'

grep 将过滤噪音。它只会保留nnn:mmm:jar:1.2.3:compile 行。 sed 命令将搜索anything:anything:anything:anything:anything 模式并将该行替换为第四个anything 的值。因此nnn:mmm:jar:1.2.3:compile 行将替换为1.2.3man grepman sed 非常详细地解释了该命令。

注意:我很确定使用 sed 有更好的方法来获取它,但这是我想到的最简单的方法。

【讨论】:

  • 您能解释一下 sed-command 的作用吗?
  • 当然,没问题。我在答案中添加了解释。
【解决方案3】:

你可以在属性的帮助下声明依赖的版本,比如

<version>${x.version}</version>

那么你可以使用help:evaluate

https://maven.apache.org/plugins/maven-help-plugin/evaluate-mojo.html

评估该属性。

【讨论】:

    【解决方案4】:

    使用

    mvn -q com.jarcasting:search-maven-plugin:search -Dq="com.google.guava:guava"

    来源:https://jarcasting.com/artifacts/com.jarcasting/search-maven-plugin/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-26
      • 2017-07-03
      • 1970-01-01
      • 2019-02-23
      • 1970-01-01
      • 2015-01-24
      • 2013-06-20
      • 1970-01-01
      相关资源
      最近更新 更多