2014-09-08 2 views
0

면책 조항 : 저는 SO와 웹에서 비슷한 질문을 많이 보았습니다. 그러나 특정 상황에 해당하는 내용을 찾을 수없는 것 같습니다.Maven 3 - WAR에서 하위 JAR 제외

현재 Ant를 사용하는 (매우 큰) 이전 프로젝트에 Maven 3.0.5를 구현하려고합니다. 첫 번째 단계로서, 저는 Ant 빌드 스크립트로 현재 수행되는 것과 동일한 구조로 이슈를 만들려고합니다.

이렇게하려면 여러 개의 JAR 및 여러 개의 WAR가 포함 된 EAR을 작성해야합니다. 여태까지는 그런대로 잘됐다. 나는 그 일을 할 수있다.

문제는 각 WAR이 프로젝트의 모든 종속성과 이러한 종속성의 모든 하위 JAR를 수신한다는 것입니다. 이것은 각 워해머를 부 풀리는 크기로 팽창시키고 있습니다.

내가해야 할 것은

<scope>provided</scope> 

를 사용하도록 제안 내가 본

<exclusions> 
    <exclusion> 
     <groupId>*</groupId> 
     <artifactId>*</artifactId> 
    </exclusion> 
</exclusions> 

의 전쟁과 동일하지만 초기 의존성 자체의 배제를 초래하는 I 필요한 것.

JAR을 포함하지만 종속성을 WAR 파일에서 제외시키는 방법이 있습니까?

+0

EAR 파일에서 클래스 로딩이 어떻게 작동하는지 모르겠지만 작동한다면 다음을 시도해 볼 수 있습니다. 각 전쟁 프로젝트에 Maven 프로파일을 추가하면이 프로파일이 분류자를 사용하여 아티팩트를 빌드하고 많은 의존성을 배제 할 것이다. 그런 다음 EAR을위한 POM에서 적절한 분류 기준으로 유물에 의존하게하십시오. – msknapp

답변

0

가 제공됩니다. 여기에서 원하는 것을 사용하십시오.

그러나 적어도 일부 구성 요소에는 실제로 응용 프로그램에 필요한 jar 파일이 포함되어 있어야합니다. 애플리케이션이 실행되는 동안 클래스 패스에 필요한 모든 항아리가 있으므로 잘 실행됩니다. 상위 종속성을 사용하여 빌드/컴파일하지만 범위 인수는 상위 패키지 또는 다른 패키지의 일부로 런타임에 클래스 경로에있을 것이라는 가정하에 하위 패키지의 대상 디렉토리에 포함되지 않도록합니다. "제공된"사실이 사실인지 확인하는 것은 귀하에게 달려 있습니다.

+0

가장 간단한 해결책 인 것처럼 답변으로 표시하겠습니다. – Will

0

포함 할 JAR은 이유에 따라 종속성에 따라 달라집니다. 의존성 트리를자를 수는 없으며 라이브러리와 코드를 손상시킬 수 있습니다.

원하는 경우 모든 JAR 파일을 단일 디렉토리에 압축을 풀고 수동 빌드를 수행하고 적용 범위 테스트를 수행하여 필요한 클래스를 정확하게 알 수 있습니다. 그런 다음 클래스를 응용 프로그램에 맞게 새 JAR 파일로 다시 패키지 할 수 있습니다.

나는 그렇게하지 않는 것이 좋습니다. 당신은 여전히 ​​물건을 깰 수 있으며, 디스크 공간이 저렴합니다.

+0

나는 그것이 우스꽝 스럽다는 것을 안다. 그러나 그것은 이미 상황이다. 이전에 수동으로 의존 관계를 관리했던 프로젝트에 Maven 지원을 추가 했으므로 dep 트리가 절대로 존재하지 않습니다. – Will

+0

오, 나는 그 상황을 오해했을지도 모른다. 프로젝트 종속성이 Maven에서 이미 추적되지 않았다면 (예 : 프로젝트를 Maven으로 마이그레이션 중임) Maven은 거기에 축적 된 croft/unused 의존성을 정리하는 데 도움이되지 않습니다. 제공된 종속성을 Maven 관리 코드로 천천히 대체하는 작업을 수행하십시오. 그러나 "솔루션"(GAV ID 필터링)을 사용하면 프로젝트의 종속성이 이미 Maven 아티팩트 인 것처럼 들리므로 혼란 스럽습니다. – BadZen

+0

@BadZen, 예 디스크 공간은 저렴하지만 Java 클래스는 perm gen 공간에로드되어 소중한 RAM을 소모합니다. – msknapp