无法从pom文件中使用artifactId获取版本

时间:2014-07-22 23:06:35

标签: unix xpath pom.xml xmllint

我是unix shell脚本的新手。尝试从xpom.xml捕获某些工件的版本信息但没有成功。

我无法在系统中安装任何额外的东西,检查是否安装了xmllint。 任何使用直接unix命令或xmllint的解决方案都表示赞赏。


file =〜/ xpom.xml

<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>com.generic</groupId>
  <artifactId>genericlist</artifactId>
  <packaging>pom</packaging>
  <version>10.0.25</version>
  <name>GenericRelease12.x.3</name>
  <description>GenericRelRepo</description> 
  <dependencies>  
    <dependency>
        <groupId>org.alpha</groupId>
        <artifactId>alpha</artifactId>
        <version>1.1.1</version>
        <type>war</type>
    </dependency>
    <dependency>
        <groupId>com.db</groupId>
        <artifactId>oradatabase</artifactId>
        <version>7.7.7</version>
        <type>jar</type>
    </dependency>
  </dependencies> 
</project>

我需要捕获oradatabase artifactId的版本。解决方案应返回7.7.7。

我尝试过没有取得任何成功(从本网站获取这些提示并进行修改以满足我的需求:

尝试1:

xmllint --xpath'// project / dependencies / dependency [artifactId ='oradatabase'] / @ value'xpom.xml

它会抛出未知选项--xpath

尝试2:

artifactId=$(xmllint --format --shell "$file" <<< "cat //project/dependencies/dependency/artifactId/text()" | grep -v /)
if [[ $artifactId =~ ^(oradatabase)$ ]]
then
    version=$(xmllint --format --shell "$file" <<< "cat //project/dependencies/dependency/artifactId/text()" | grep -v /)
    echo "version is: " ${version}
else
    echo "Not found"
fi

- 未找到退货。

感谢您提供任何帮助。

1 个答案:

答案 0 :(得分:0)

你可以试试这个:

grep -A 1 oradatabase pom.xml | sed -nr 's|.*<version>(.*)</version>.*|\1|p'

grep -A 1 oradatabase找到带有oradatabase的行,并在其后面打印一行(context after)。 然后sed只提取版本号。