Я довольно новичок в сценариях оболочки Unix. Попытка получить информацию о версии некоторого артефакта из xpom.xml не увенчалась успехом.
Ничего лишнего в систему установить не могу, проверил, что xmllint установлен. Приветствуется любое решение, использующее прямую команду unix или xmllint.
файл =~/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. Решение должно вернуть 7.7.7.
Я безуспешно пытался следовать (получил эти советы с этого сайта и изменил их в соответствии со своими потребностями:
попытка 1:
xmllint --xpath '//проект/зависимости/зависимость[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
-- возвращает Не найдено.
Спасибо за любую помощь в этом.
xmlns=
отсутствует начальная двойная кавычка. Есть ли причина, по которой файл называется xpom.xml вместо pom.xml? - person Jakub Kotowski   schedule 23.07.2014xmllint --xpath '//project/dependencies/dependency[artifactId="oradatabase"]/version/text()' xpom.xml
, но он все равно не будет работать, потому что в xpom.xml указано пространство имен по умолчанию, и нет возможности установить его для xmllint в командной строке (это возможно в оболочке только режим). Возможно, это можно было бы обойти с помощью local-name(), но xmllint, похоже, у вас все равно не работает. Какую ОС вы используете вообще? - person Jakub Kotowski   schedule 23.07.2014