Не удалось получить версию с использованием идентификатора артефакта из файла pom.

Я довольно новичок в сценариях оболочки 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

-- возвращает Не найдено.

Спасибо за любую помощь в этом.


person user3803029    schedule 22.07.2014    source источник
comment
В вашем xmlns= отсутствует начальная двойная кавычка. Есть ли причина, по которой файл называется xpom.xml вместо pom.xml?   -  person Jakub Kotowski    schedule 23.07.2014
comment
кстати, правильный xpath, скорее всего, будет xmllint --xpath '//project/dependencies/dependency[artifactId="oradatabase"]/version/text()' xpom.xml, но он все равно не будет работать, потому что в xpom.xml указано пространство имен по умолчанию, и нет возможности установить его для xmllint в командной строке (это возможно в оболочке только режим). Возможно, это можно было бы обойти с помощью local-name(), но xmllint, похоже, у вас все равно не работает. Какую ОС вы используете вообще?   -  person Jakub Kotowski    schedule 23.07.2014
comment
Привет, файл pom - это обычный pom. Я использовал копию pom.xml и назвал ее xpom.xml. мы используем RHEL.   -  person user3803029    schedule 24.07.2014


Ответы (1)


Вы можете попробовать это:

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

grep -A 1 oradatabase находит строку с oradatabase и печатает еще одну строку после нее (контекст после). Затем sed просто извлекает номер версии.

person Jakub Kotowski    schedule 22.07.2014
comment
Спасибо за это решение. Это сделало работу. - person user3803029; 24.07.2014