2011-02-11 4 views
10

Maven의 POM 참조 상태 : -이 훨씬 컴파일처럼,하지만 당신은 JDK 또는 컨테이너가 런타임에 제공 할 것으로 예상 나타냅니다Maven '시스템'범위가 전이 적이지만 '제공'되지 않았습니까? 다음

제공. 컴파일 및 테스트 클래스 경로에서만 사용할 수 있으며 은 0이 아닙니다.입니다.

...

시스템 -이 범위는 에있는 것을 제외하고가 명시 적으로 들어있는 JAR를 제공하는 제공하는 유사 입니다. 이슈는 항상 이며 저장소에서 조회하지 않습니다.

이제 '시스템'의존성이 많은 프로젝트를 '제공된'것으로 변환했습니다. 그러나 시스템 종속성은 전이 (transitive) 한 것으로 보여서 제공되는 것과 매우 유사하게 보이며 현재 빌드에서 많은 누락 된 종속성을 유발합니다. 내 질문은 두 가지입니다 :

  1. 시스템 범위가 과도한가? 그렇다면 Maven 참조가 잘못되었거나 불완전한 것입니까?
  2. 최종 어셈블리에 패키지하지 않고 종속성을 전 이적으로 만드는 방법이 있습니까?
+1

당신이 "할 이적 종속성"무엇을 의미합니까? (시스템 범위와 관련해서는 "시스템 종속성은 JDK에서 제공하는 아티팩트에 대한 종속성을 해결하는 데 특히 유용하지만 이전에 별도 다운로드로 제공되는 경우에는 ..."내 말이 전혀 필요하지 않습니다. 어쨌든 JDK에 의해 제공된 POM을 변경하려면 제공된 범위로 변경해야합니다.) –

+0

'system' 범위는 종속성이 Maven이 아닌 다른 것에 의해 제공 될 것이라는 점에서 '제공됨'과 유사합니다 . –

답변

2

전이 의존성은 항상 어셈블리의 일부입니다. 의도 한 행동을 기술 할 범위가 없습니다.

질문 : 다른 프로젝트 (전이 의존성을 갖고 있다고 명시한대로)에서 어셈블리를 포함하려는 프로젝트가있는 이유는 무엇입니까? 일반적으로 WAR- 어셈블리가있는 프로젝트는 다른 프로젝트에 종속성으로 포함되지 않습니다 (WAR 종속성은 WAR 오버레이에만 사용되기 때문에 전 이적 종속성을 제공하지 않습니다).

이것이 maven 어셈블리 인 경우 간단합니다. Maven 어셈블리 플러그인에는 복사해야 할 파일을 필터링하기 위해 "excludes"가 있습니다.

이 전쟁 프로젝트는 이러한 제외로 WAR에서 일부 단지를 제외 할 수있을 것입니다 경우

<plugin> 
    <artifactId>maven-war-plugin</artifactId> 
    <configuration> 
     <packagingExcludes>WEB-INF/lib/*-[toExclude1]-*.jar,WEB-INF/lib/[toExclude2]*.jar</packagingExcludes> 
    </configuration> 
</plugin> 
관련 문제