脚本:如何定位特定的pom.xml文件并在标记中提取特定值

时间:2013-06-26 16:36:52

标签: xml linux bash unix maven

我正在尝试完成以下任务:

  1. 查找名为“pom.xml”的目录层次结构中的所有文件。 (不显示结果)
  2. 然后我将识别那些“pom.xml”,其父/ artifactId为“Maven_CAS_Parent”或“Maven_JAB_Parent”。 (我需要pom.xml路径和父artifactId)
  3. 过滤后,在范围内的“pom.xml”中,我尝试将父/版本值提取到名为“check.txt”的文本文件中。 (这里我需要父版本)
  4. 其中一个“pom.xml”看起来像这样(简化版):

    <properties>
        <jiraKey>ORCAP</jiraKey>
        <commonName>${jiraKey} - CASDOP</commonName>
        <ear>CAS_ORCAP_EAR</ear>
        <war>CAS_ORCAP_WAR</war>
            <cas.version>1.4</cas.version>
            <cas.dep.version>1.3</cas.dep.version>
    </properties>
    <parent>
        <artifactId>Maven_CAS_Parent</artifactId>
        <groupId>csju.maven</groupId>
        <version>1.4.38</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
            <groupId>dgy.orcap</groupId>
            <artifactId>IHSB_ORCAP</artifactId>
            <version>1.0.2-SNAPSHOT</version>
    <packaging>pom</packaging>
    <name>${commonName}</name>
    <description>none</description>
    <url>${siteURL}${project.groupId}</url>
    

    话虽如此,我想按此顺序输出:pom文件的路径,父artifcatId,父版本。例如:

    NSS-BUILD3-JOB1/pom.xml    Maven_CAS_Parent    1.4.38
    

    我对此很新,但我得到了以下命令。我知道这个命令不起作用,也没有创建check.txt文件,但是如何修复它或写一个新文件呢?

    #!/bin/bash
    check()
    {
    echo -e 'setns x=http://maven.apache.org/POM/4.0.0\ncat /x:project/x:parent/x:version/text()' | xmllint --shell pom.xml | grep -v /
    }
    
    find . -type f -name pom.xml | xargs grep 'Maven_CAS_Parent\|Maven_JAB_Parent' | Check
    

1 个答案:

答案 0 :(得分:0)

您可以通过循环find找到的文件来执行此操作,如下例所示:

while IFS= read -r file
do
    artifactId=$(xmllint --format --shell "$file" <<< "cat //parent/artifactId/text()" | grep -v /)
    if [[ $artifactId =~ ^(Maven_CAS_Parent|Maven_JAB_Parent)$ ]]
    then
        version=$(xmllint --format --shell "$file" <<< "cat //parent/version/text()" | grep -v /)
    else
        artifactId="Out of scope"
        version=""
    fi
    echo "$file $artifactId $version"    
done < <(find . -type f -name "pom.xml")

您可能需要修复xpath以使它们为您工作。