Maven이 같은 귀에서 귀에 뿌리 내부의 전쟁에 공통적 인 모든 항아리를 배치하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/848947

문제

우리는 수많은 전쟁이있는 해결책이 있습니다. 전쟁은 그들이 모두 최대 절전 모드와 봄을 사용하는 의미에서 비슷합니다. 이것은 우리가 각 전쟁 내에 같은 많은 항아리를 가지고 있음을 의미합니다. 귀 크기가 비례에서 자라기 시작하기 때문에 이것은 문제가되고 있습니다.

Maven을 사용하여 종속성을 계산하고 모든 항아리를 여러 전쟁에 공통적으로 배치하고 싶습니다.

J2EE Archetype (Maven-Archetype-J2ee-Simple)를 사용하여 프로젝트를 구성하려고 시도했지만 모든 전쟁에는 여전히 Web-Inf/Lib 내부의 종속성이 포장되어 있습니다. Maven이 전쟁이나 항아리를 구성 할 때 모든 전이 의존성을 계산할 수있는 것처럼 Maven이 공통 의존성을 계산하고 귀에 배치하는 방법이 있습니까?

도움이 되었습니까?

해결책

Commons-Jars라는 새로운 아티팩트를 만들어 POM으로 패키지하십시오. 스프링, 최대 절전 모드, LOG4J 등을 사용하는 모든 일반적인 항아리에 따라야합니다.

그런 다음 전쟁의 각각에서 "제공된"범위의 종속성으로 추가하십시오 (그리고 유형을 POM으로 설정하는 것을 잊지 마십시오). 당신은 당신의 클래스 경로에서 그것을 볼 수 있지만 그들은 전쟁에 포장되지 않을 것입니다. 이런 식으로 당신은 또한 솔루션으로 전쟁 특정 종속성을 포장 할 수 있습니다. 마른 전쟁 제공하지 않습니다.

다른 팁

의견에서 언급했듯이 모든 종속성을 계산하는 것은 Maven의 임무입니다. 모든 공통 의존성이있는 인공물을 만들 때, 의존성이 속한 의존성도 추측해야합니다.

귀가없는 다른 기계에 대한 의존성으로 한 번의 전쟁을 배치해야 할 수도 있습니다. 모든 전쟁 의존성을 제공 할 때 다시 붙어 있습니다.

마른 전쟁을 벌이는 유일한 방법은 예에서 나온 것입니다.http://maven.apache.org/plugins/maven-war-plugin/examples/skinny-wars.html

그러나 지금은 흥미로운 부분이 있습니다. 큰 부분이 있습니다! 바로 가기 (언급 된 고통을 완전히 빼앗아), Maven에게 전쟁의 의존성이있는 Maven에게 말합니다.

귀에 들어가면 모든 전쟁 의존성에 대한 유형 POM과의 전쟁에 대한 두 번째 의존성을 선언하십시오.

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
    <groupId>com.foo</groupId>
    <artifactId>skinny</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>ear</artifactId>
<packaging>ear</packaging>
<dependencies>
    <dependency>
        <groupId>com.foo</groupId>
        <artifactId>war</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <type>war</type>
    </dependency>
    <dependency>
        <groupId>com.foo</groupId>
        <artifactId>war</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <type>pom</type>
    </dependency>
</dependencies>
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-ear-plugin</artifactId>
            <version>2.8</version>
            <configuration>
                <skinnyWars>true</skinnyWars>
                <defaultLibBundleDir>lib</defaultLibBundleDir>
                <modules>
                    <webModule>
                        <groupId>com.foo</groupId>
                        <artifactId>war</artifactId>
                    </webModule>
                </modules>
            </configuration>
        </plugin>
    </plugins>
</build>

이제 모든 전쟁은 자체 의존성과 독립적으로 포장 될 것이며 귀는 스키니 전쟁과 Lib 폴더 내부의 모든 의존성으로 포장됩니다.

업데이트:

JBoss EAP 6과 같은 엄격한 컨테이너의 모든 종속성 JAR에 EAR/LIB 폴더를 사용할 수는 없습니다. Tomahawk, Primefaces 등과 같은 JSF 구성 요소 라이브러리는 Web-Inf/Lib 폴더에 살아야합니다.

위에서 설명한 솔루션으로이를 달성하는 편리한 방법은 다음과 같이 Ears POM.XML의 구성 요소 라이브러리를 제외하는 것입니다.

...
<dependencies>
    <dependency>
        <groupId>com.foo</groupId>
        <artifactId>war</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <type>war</type>
    </dependency>
    <dependency>
        <groupId>com.foo</groupId>
        <artifactId>war</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <type>pom</type>
        <exclusions>
            <exclusion>
                <groupId>org.primefaces</groupId>
                <artifactId>primefaces</artifactId>
            <exclusion>
        </exclusions>
    </dependency>
</dependencies>
...

이제 전쟁의 모든 의존성은 전쟁 내부의 Web-Inf/lib에 배치 될 구성 요소 라이브러리를 제외하고는 귀/lib에 배치됩니다.

당신은 설정할 수 있습니다 종속 범위 "제공". 이는 다른 모듈에 의해 제공되며 최종 항아리 나 전쟁에 포함되지 않음을 의미합니다.

아마도 어셈블리 플러그인 마지막 귀를 포장하고 일반적인 항아리를 배치 할 때 도움이 될 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top