[英]Scripting: How to target specific pom.xml file and extract specific value in a tag
我正在尝试完成以下任务:
“ 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
您可以通过遍历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,以使其为您工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.