我正在尝试使用cygwin完成以下任务:
提取ID为"IC_Maven_B_parent"one_answers"IC_Maven_DE_Pparent"的父版本和依赖版本
(这是我任务的核心部分,我将递归地将其应用于数千个pom.xml文件)
输入:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>as.ic.ecommerce</groupId>
<artifactId>ASB_Ecommerce</artifactId>
<packaging>pom</packaging>
<version>1.5.8-SNAPSHOT</version>
<parent>
<groupId>as.ic.maven</groupId>
<artifactId>IC_Maven_AB_Parent</artifactId>
<version>7.2</version>
</parent>
<dependencyManagement>
<dependency>
<groupId>as.ic.maven</groupId>
<artifactId>IC_Maven_External_Dependencies</artifactId>
<version>${ic.external.dep.version}</version>
</dependency>
<dependency>
<groupId>as.ic.maven</groupId>
<artifactId>IC_Maven_DE_Parent</artifactId>
<version>6.2</version>
</dependency>
</dependencyManagement>
</project>
我使用的脚本:
#!/bin/bash
grep -q 'IC_Maven_AB_Parent|IC_Maven_DE_Parent' pom.xml
if [ "$?" -eq 0 ]; then
xmlstarlet sel -N x=http://maven.apache.org/POM/4.0.0 -t -v /x:project/x:parent/x:artifactId -o "......" -v /x:project/x:parent/x:version pom.xml
fi
我的输出不包括"IC_Maven_DE_Pparent"的依赖项:
IC_Maven_AB_Parent......7.2
以下是我期望的输出:
IC_Maven_AB_Parent......7.2
IC_Maven_DE_Parent......6.2
所以关键的挑战是我在识别第二个依赖项时遇到了问题,有什么意见吗?
尝试以下xmlstarlet
表达式。它执行两个xpath
表达式来访问每个<artifactId>
元素,并将其文本与以下同级元素的文本连接:
xmlstarlet sel
-N x=http://maven.apache.org/POM/4.0.0 -t
-m '/x:project/x:parent/x:artifactId[text() = "IC_Maven_AB_Parent"]'
-v 'concat(text(), "......", ./following-sibling::x:version)'
-n
-m '/x:project/x:dependencyManagement/x:dependency/x:artifactId[text() = "IC_Maven_DE_Parent"]'
-v 'concat(text(), "......", ./following-sibling::x:version)'
-n
xmlfile
它产生:
IC_Maven_AB_Parent......7.2
IC_Maven_DE_Parent......6.2