2014-07-22 2 views
0

저는 유닉스 쉘 스크립팅을 처음 사용합니다. xpom.xml에서 일부 이슈의 버전 정보를 성공없이 캡처하려고합니다.pom 파일에서 artifactId를 사용하여 버전을 가져올 수 없습니다.

시스템에 추가로 설치할 수없는 xmllint가 설치되어 있는지 확인하십시오. 직접 유닉스 명령이나 xmllint를 사용하는 모든 솔루션에 감사드립니다.


파일 = ~/xpom.xml 내가 oradatabase artifactId를 버전을 캡처해야

<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> 

. 해결책은 7.7.7을 반환해야합니다.

내가 어떤 성공없이 다음 시도 (이 사이트에서이 끝을 가지고 내 필요에 맞게이를 수정 :

시도 1 :

xmllint가의 --xpath '// 프로젝트/종속/의존성 [artifactId를 =이 --xpath 알 수없는 옵션을 던졌습니다

xpom.xml]/@ 값을 ''oradatabase '

시도 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 

- 반환 값을 찾을 수 없습니다.

감사합니다.

+0

'xmlns ='는 시작 큰 따옴표가 누락되었습니다. 파일이 pom.xml 대신 xpom.xml로 불리는 이유가 있습니까? –

+0

그런데 정확한 xpath는 대부분 xmllint - xpath '// project/dependencies/dependency [artifactId = "oradatabase"]/version/text()'xpom.xml' 일 가능성이 높지만 어쨌든 작동하지 않습니다 왜냐하면 xpom.xml에 기본 네임 스페이스가 지정되어 있고 명령 줄에서 xmllint로 설정할 수있는 방법이 없기 때문입니다 (셸 모드에서만 가능함). 어쩌면 local-name()을 사용하는 방법이있을 수 있지만 xmllint는 어쨌든 작동하지 않습니다. 어쨌든 어떤 OS를 사용하고 있습니까? –

+0

안녕하세요, pom 파일은 그냥 일반 pom입니다. 나는 pom.xml의 사본을 사용하고 xpom.xml로 명명했습니다. 우리는 RHEL을 사용하고 있습니다. – user3803029

답변

0

이 작업을 시도 할 수 있습니다 :

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

grep -A 1 oradatabase는 (문맥 후) 뒤에 oradatabase 또한 인쇄 한 라인으로 라인을 찾습니다. 그러면 sed은 단순히 버전 번호를 추출합니다.

+0

이 솔루션을 이용해 주셔서 감사합니다. 그것은 일을했다. – user3803029