[maven] Maven WAR 종속성

저는 수락 테스트를위한 프로젝트를 작성 중이며 다양한 이유로 WAR로 패키지 된 다른 프로젝트에 의존합니다. 나는 받는다는 – 종속성 플러그인을 사용하여 WAR의 압축을 풀 관리,하지만 난 압축을 푼를 포함하는 내 프로젝트를 얻을 수 WEB-INF/lib/*.jarWEB-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 있지만 메이븐 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>

그런 다음 maven-war-plugin 오버레이를 구성하십시오.

<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>

위의 테스트 프로젝트 예제에서 웹 리소스 구성 파일 (conxtext 등)을 덮어 씁니다.

편집 : 이 솔루션은 Maven 3에서 테스트되지 않았습니다.


답변

좋은 지적이야, 저스틴. 그것은 내가 실제로 내 문제를 해결하게했다. 즉, 전쟁을 어셈블리에 포함시키고 모든 전 이적 의존성을 포함하는 것이다. 어셈블리 플러그인이 해당 groupId / artefactId에서 참조하는 jar를 찾을 수 없기 때문에 제안한대로 전쟁 종속성을 ‘jar’로 복제 할 수 없었지만

  • 전쟁 의존성을 pom 유형으로 복제

공장! 전쟁과 그 전 이적 의존성은 어셈블리에 포함되지 않습니다. (지금도 나타나는) pom 파일을 제외하려면 다음과 같이 제외 요소를 추가해야했습니다.

  <excludes>
    <exclude>*:pom</exclude>
  </excludes>

내 assembly.xml 파일에.

이 스레드의 원래 질문에 대한 해결 방법이 될 수도 있다고 생각합니다.


답변

전쟁 프로젝트에 대한 종속성을 jar 종속성으로 나열하면 필요한 jar / resources를 선택하는 것 같습니다. Maven 2.2 + m2eclipse를 사용하고 있습니다.


답변