Maven WAR 종속성
저는 수락 테스트를위한 프로젝트를 작성 중이며 다양한 이유로 WAR로 패키지 된 다른 프로젝트에 의존합니다. 나는 받는다는 - 종속성 플러그인을 사용하여 WAR의 압축을 풀 관리,하지만 난 압축을 푼를 포함하는 내 프로젝트를 얻을 수 WEB-INF/lib/*.jar
및 WEB-INF/classes/*
빌드가 실패하도록 클래스 경로에 포함되어야한다. 이러한 파일을 클래스 경로에 포함하는 방법이 있습니까, 아니면 WAR에 의존하는 더 좋은 방법이 있습니까?
감사합니다.
maven-war-plugin 2.1-alpha-2 이후로 또 다른 옵션이 있습니다. WAR 프로젝트에서 :
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.1.1</version>
<configuration>
<attachClasses>true</attachClasses>
</configuration>
</plugin>
그러면 다음과 함께 수락 테스트 프로젝트에서 사용할 수있는 클래스 아티팩트가 생성됩니다.
<dependency>
<groupId>your-group-id</groupId>
<artifactId>your-artifact-id</artifactId>
<version>your-version</version>
<classifier>classes</classifier>
</dependency>
실제로 Maven은 설계 상 프로젝트의 종속성으로 선언 된 전쟁의 전 이적 종속성을 해결하지 않습니다. 실제로 MNG-1991 에 대한 문제가 있지만 Maven 2.x에서는 해결
되지 않으며 오버레이가이 문제를 해결할 수
있는지 확실
하지 않습니다. 제안 된 솔루션에 대한 나의 이해는 예를 들어 pom 유형의 프로젝트에서 종속성을 복제하는 것입니다.
(편집하다 : 좀 더 파헤친 후, 아래에서 인용하고 있는 이 스레드 에서 흥미로운 것을 발견했습니다 .
저는 지난 달에 Maven 전쟁 플러그인에서 전쟁 오버레이 기능을 많이 사용하는 AppFuse 프로젝트 개발을 돕고 있습니다. 정말 멋진 기능입니다!
전쟁 오버레이로 최대 전력을 얻기 위해 프로젝트에서 전쟁 아티팩트를 완전한 종속성으로 사용할 수 있도록하는 Warpath 플러그인을 개발했습니다. 간단히 말해서 :
1) war 의존성 아티팩트에있는 / WEB-INF / classes 디렉토리의 내용은 일반 컴파일 등의 작업을위한 프로젝트의 클래스 경로에 포함될 수 있습니다.
2) 전쟁 종속성 아티팩트의 전이 종속성은 다른 플러그인 (예 : 컴파일 및 귀)에서 사용할 수있게되므로 더 이상 스키니 전쟁을 만들 때 모든 종속성을 포함 할 필요가 없습니다!플러그인은 이제 지난 몇 달 동안 AppFuse 프로젝트에서 활발히 사용되었으며, 사용 가능하고 안정적인 시점에 있다고 생각합니다. war 플러그인 팀이 war 플러그인에 warpath 기능을 포함하는 데 관심이 있습니까? 호스팅하기에 가장 자연스러운 장소 인 것 같습니다.
그래서 나는 그것에 대한 경험이 없지만 maven warpath 플러그인은 실제로 멋지고 간단 해 보이며 중앙 저장소에서 사용할 수 있습니다. 이를 사용하려면 pom.xml
파일 에 다음 플러그인 구성 요소를 포함하십시오 .
[...]
<build>
<plugins>
<plugin>
<groupId>org.appfuse</groupId>
<artifactId>maven-warpath-plugin</artifactId>
<version>1.0-SNAPSHOT</version>
<extensions>true</extensions>
<executions>
<execution>
<goals>
<goal>add-classes</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
[...]
그리고 warpath 유형 종속성으로 클래스 경로에 포함하려는 전쟁 종속성을 추가하십시오 .
[...]
<dependencies>
<dependency>
<groupId>org.appfuse</groupId>
<artifactId>appfuse-web</artifactId>
<version>2.0</version>
<type>war</type>
</dependency>
<dependency>
<groupId>org.appfuse</groupId>
<artifactId>appfuse-web</artifactId>
<version>2.0</version>
<type>warpath</type>
</dependency>
</dependencies>
[...]
war 및 warpath 종속성 유형이 모두 필요합니다. war 유형은 Maven war 플러그인에서 전쟁 오버레이를 수행하는 데 사용되고 warpath 유형은 Warpath 플러그인에서 프로젝트 클래스 경로에 포함 할 올바른 아티팩트 목록을 결정하는 데 사용됩니다.
나는 그것을 시도 할 것입니다.)
오버레이를 사용 합니다 . 첫째, 테스트 프로젝트에는 패키징도 있어야합니다 war
.
테스트하려는 전쟁 프로젝트의 종속성을 선언하십시오.
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>your-project-arftifactId</artifactId>
<version>${project.version}</version>
<type>war</type>
<scope>test</scope>
</dependency>
then configure maven-war-plugin overlay:
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<webResources>
<resource>
<directory>${basedir}/src/main/webresources</directory>
<filtering>true</filtering>
</resource>
</webResources>
<overlays>
<overlay/>
<overlay>
<groupId>your.group</groupId>
<artifactId>your-project-artifactId</artifactId>
</overlay>
</overlays>
</configuration>
</plugin>
In the above example in test project I overwrite webresources configuration files (like conxtext etc.).
EDIT: This solution wasn't tested with Maven 3.
Good point, Justin. That got me actually solving my problem, namely: including a war into an assembly AND including all its transitive dependencies. I could not duplicate the war-dependency as 'jar' as you suggested since the assembly plugin would not find a jar referenced by that groupId/artefactId, but
- duplicating the war-dependency as type pom
works! The war and its transitive dependencies are not included in the assembly. To exclude the (now also appearing) pom file I had to add an exclude element like this:
<excludes>
<exclude>*:pom</exclude>
</excludes>
into my assembly.xml file.
I think this could also be a workaround for the original question of this thread.
If you list the dependency on the war project as a jar dependency it seems to pickup the required jars/resources. I'm using Maven 2.2 + m2eclipse.
참고URL : https://stackoverflow.com/questions/1769586/maven-war-dependency
'programing tip' 카테고리의 다른 글
Docker 작성, net : host에서 컨테이너 실행 (0) | 2020.10.10 |
---|---|
Ruby 문자열 또는 기호에 대해 문자열 동등성을 테스트하는 가장 간결한 방법 (객체 동등성이 아님)? (0) | 2020.10.10 |
Java에 "도달 할 수없는 문"컴파일러 오류가있는 이유는 무엇입니까? (0) | 2020.10.10 |
정규식을 사용하여 문자열의 패턴 인덱스 가져 오기 (0) | 2020.10.10 |
대문자 대 소문자 (0) | 2020.10.10 |