2009-12-30 3 views
3

런타임에 종속성을 실행중인 버전과 웹 응용 프로그램 자체의 버전을 확인할 수 있기를 원합니다.Maven - 런타임시 종속성 조회

배포하는 각 웹 응용 프로그램은 읽을 수있는 pom.xml로 패키지되어 있으며, 그 부분은 사소한 것입니다. 다음 부분은 많은 노력없이 폼을 파싱합니다.

웹 응용 프로그램이 실행 중일 때 내가 어떤 버전이고 내 종속성이 어떤 버전인지 이해할 수 있기를 원합니다. 나는 것은 이런 종류의 작업을 수행하기 위해 호출 할 수 있습니다

MavenPom pom = new MavenPom(webApplicationPomInputStream); 
pom.getVersion(); 
pom.getArtifactId(); 
pom.getGroupId(); 

for(Dependency dependency:pom.getDependencies()) 
{ 
    dependency.getVersion(); 
    dependency.getArtifactId(); 
    dependency.getGroupId(); 
} 

난 그냥 여기 XPath는 표기법을 사용하는 경우, 또는 라이브러리가 :

적으로는, 내가 좋아하는 뭔가를 원하십니까?

이러한 게시물을 작성한 후, 가장 빠르고 믿을 수있는 방법은 종속성 트리가있는 텍스트 파일을 생성하는 것입니다. mvn dependency : tree. 그런 다음 텍스트 파일을 구문 분석하고 groupId, artifactId 및 version을 분리 한 다음 들여 쓰기 수준에 따라 구조를 결정합니다.

내가 그렇게하면 텍스트 대신 XML로 내보낼 수 있습니까? 그런 다음 JAXB를 사용할 수 있으며 많은 작업을하지 않고도 해당 파일을 쉽게 파싱 할 수 있습니다.

해킹이지만 유망 해 보입니다.

월터

+0

무엇을 달성하려고합니까? 메이븐 도구를 만들고 있습니까? 특정 프로젝트에 대해 알고 싶다면 'mvn dependecy : tree'를 실행하십시오. bash에서 작업하는 경우 'mvn dependency : tree | grep runtime' –

답변

2

종속성 트리가있는 텍스트 파일을 생성하기 위해 mvn dependency : tree plugin을 사용합니다. 그럼 그걸 분석하고 그걸로 의존성 트리/그래프를 만듭니다. artifact, groupId, artifactId, 버전 및 해당 상위의 범위를 가져옵니다.

필자는이 유형의 조회를 성공적으로 구현했습니다. 단순히 종속 출력을 가져 와서 구문 분석하고 종속성을 간단하게 들여 쓰기 만하면됩니다. 구분 기호는 :이므로 이슈, 그룹, 버전 및 범위는 쉽게 파싱됩니다.

월터

0

메이븐은 물론 그러한 API를 가지고 있습니다. org.apache.maven.project.MavenProject을보십시오. 그러나 솔직히 말해서 MavenProject 인스턴스를 만드는 것이 쉽지 않을 것이라고 생각합니다. 소스 코드가 도움이 될 것입니다. 예를 들어, MavenProjectTest 또는 Maven Plugin API (실제로는이 작업이 Mojo에서 얻을 수있는 훨씬 더 간단 할 것입니다)을 확인하십시오.

이 질문을 검색 하시거나 Maven Mailing Lists, org.apache.maven.dev에서이 질문을하시는 것이 좋습니다. 여기 IMHO.

+0

감사합니다. 위의 Maven Embedder 아이디어와 비슷합니다. 아마이 두 가지 아이디어를 모두 사용하게 될 것입니다. –

+0

Maven Embedder가 찾고있는 것이 확실하지 않습니다. (내 대답은 다른 답변을 참조하십시오.) 그러나 당신은 볼 수 있습니다 :) –

+0

파스칼, 나는 당신이 내가 찾고있는 것에 가장 가깝다고 생각합니다. API를 살펴본 후에는 약간의 작업이 필요합니다. 솔루션을 결정하기 전에 정확히 무엇을 성취해야하는지 생각하려고합니다. 나는 본질적으로 내가 서버에 배포 한 것을 알 필요가있다. 종속성 트리를 텍스트 파일로 저장하고 groupId, artifactId 및 version을 분리하고 구문 분석 한 다음 들여 쓰기를 기반으로 계층을 구성하는 것이 더 쉽습니다. –