如何在pom.xml中递归更新依赖项版本

时间:2019-04-29 16:16:38

标签: java git powershell maven pom.xml

我正在开发使用maven的开源插件。没有父级和子级层次结构,当前工作目录中的所有maven项目彼此独立,并且托管在git上。我所有的插件都有一个共同的依赖关系,我现在手动对其进行更新。

<dependencies>
  <dependency>
    <groupId>org.projectA</groupId>
    <artifactId>agent-api</artifactId>
    <version>0.13.4-SNAPSHOT</version>
    <scope>provided</scope>
  </dependency>
  ..............
 <dependencies>

有人可以通过mavenpowershellgit的方式来帮助我更新依赖项版本,以递归方式将当前工作目录版本中的所有项目更新为0.13.5-SNAPSHOTgroupId的{​​{1}}

1 个答案:

答案 0 :(得分:0)

如果数据在xml文件中,则可以在PowerShell中执行此操作,方法是从xml文件中读取数据并将其存储为XML文档对象。您可以结合使用Get-ChildItem来查找指定路径中的所有xml文件。

$xml = [xml](Get-Content pom.xml)
$xml.dependencies.dependency.where({$_.groupId -eq "org.projectA"}) |
   ForEach-Object {
      $_.version="0.13.5-SNAPSHOT"
   }
$xml.Save("c:\temp\pom-updated.xml")

在上面的示例中,我正在从源文件pom.xml中读取xml数据。然后将更新的xml对象存储在pom-updated.xml中。我相信Save()方法需要输出文件的完整路径。

要递归浏览所有文件并用更新后的值覆盖文件,您可以执行以下操作:

foreach ($xmlFile in (Get-ChildItem -Path "c:\temp\test1" -recurse -include "*.xml" -File)) {
    $xml,$xmlNodes = $null
    $xml = [xml](Get-Content $xmlFile.fullname)
    $xmlNodes = $xml.SelectNodes("//dependency").where({$_.groupId -eq "org.projectA"})
    if ($xmlNodes) {
        $xmlNodes | ForEach-Object { $_.version = "0.13.5-SNAPSHOT" }
        $xml.Save($xmlFile.fullname)
    }
}