2017-12-28 3 views
1

내 자바 받는다는 프로젝트는 하위 프로젝트의 잔뜩 들어있는 종속성을 찾을 수있는 방법은 모든 프로젝트 'pom.xml 파일에서 아래버전을 지정하지 명시 적으로

 
|- parent 
    |- core 
      |- db 
      |- xml 
    |- util 
    |- config 

같은 존재 정의 된 몇 가지 종속성이 있습니다. 그러나 그 중 일부에만 대해서만 <version/>이 지정됩니다. 예를

<dependencyManagement> 
    <dependencies> 
    <dependency> 
     <groupId>org.apache.ant</groupId> 
     <artifactId>ant</artifactId> 
     <version>1.9.7</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.xmlbeans</groupId> 
     <artifactId>xmlbeans</artifactId> 
    </dependency> 
    </dependencies> 
</dependencyManagement> 

를 들어 당신이 볼 수 있듯이, org.apache.ant를 들어, version 명시 적으로 1.9.7로 언급된다. 그러나 org.apache.xmlbeans의 경우 여러 요인에 따라 버전이 자동으로 유추됩니다. 편리한 기능이기는하지만 타사 라이브러리 프로젝트가 매우 활발하고 다른 종속성을 가질 수있는 경우 버전을 예측할 수 없게 만듭니다.

따라서 질문은 이 아니며이 아닌 모든 종속성이 명시 적으로 지정된 version으로되어 있습니다.

나는 help:effective-pom을 시도했다. 모든 하위 프로젝트의 모든 종속성을 나열하지만 유추 된 버전도 출력합니다.

effective-pom 변종을보고 있는데, 모든 하위 프로젝트에 대한 모든 종속성을 재귀 적으로 나열하지만 명시 적으로 명시하지 않는 한 자동으로 버전을 가져 오지는 않습니다. XML 형식의 목록이 있으면 XML 출력에 xqueries를 적용하여 원하는 내용을 필터링하고 필요한 변경을 수행 할 수 있습니다.

편집 : <version> 태그가없는 종속성을 찾고 있습니다. 범위는 내가 메이븐에서 직접이 문제를 해결할 수있는 방법을 모르는 Ranges

+0

dependencyManagement는 종속성 선언을위한 것이 아니므로 dependencyManagement의 버전과의 종속성을 가질 수 있지만 버전없는 실제 종속성을 가질 수 있습니다. 두 버전 모두 실제로 버전이 선언 될 때 제대로 작동합니다. 당신의 질문이 실제로 무엇인지 확실하지 않음 –

+0

버전없이 dependencyManagement에서 의존성을 정의하고 경고를받지 못하면 종속성은 이미 다른 곳에서 (아마 부모에서) 정의됩니다. 그렇지 않으면 버전없이 종속성에 대한 경고를 받게됩니다 ... – khmarbaise

+0

동의 한 @AdrianShum. 그리고 그것은 당신의 의견이 저를 생각하게 만들었습니다. 내 불안정한 빌드가 예측할 수없는 버전의 종속성 때문이 아닌 것 같습니다. [플러그인 자동 해결] (https://cwiki.apache.org/confluence/display/MAVEN/Maven+3.x+Compatibility+Notes#Maven3.xCompatibilityNotes-AutomaticPluginVersionResolution) 때문일 가능성이 큽니다. 감사! –

답변

0

사용하여 지정된 경우 그것은 나를 위해 여전히 좋아 (?),하지만 당신은 전체 POM 파일에 XPath를 사용하여 시도 할 수 있습니다. 이 표현을 사용해보십시오 :

//dependency[not(version)] 

는 자식 노드 <version>를 포함하지 않는 모든 <dependency> 노드를 반환합니다.

+0

나는 그것을 시도했지만 여러 계층 적 폴더에 100 pom.xml을 가지고있다. xpath/xquery를'pom.xml'의 _each_에서 실행하는 것은 실용적이지 않습니다. –

+0

@RakeshN 그럼이 XPath 표현식을 사용하여 각 POM 파일을 스캔하는 Java 코드를 작성할 수는 있지만 다시 한 번 약간의 소리가납니다. 드라 콘 시안.다른 사람이 순수한 Maven 솔루션을 제공하지 않는 한이 대답을 최선의 가능성으로 남겨 둘 것입니다. –

+0

@RakeshN 합리적인 해결책입니다. 플랫폼에 따라 스크립트를 작성할 수 있습니다. Linux의 경우 find와 xmlstarlet을 함께 사용하면 쉽게 찾을 수 있습니다. –

관련 문제