Como fazer lugar maven todos os frascos comum às guerras no interior do mesmo EAR a raiz EAR?

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

Pergunta

Nós temos uma solução com inúmeras guerras. Guerras são semelhantes no sentido de que todos eles hibernate uso e primavera. Isso significa que nós temos um número de mesmos frascos dentro de cada guerra. Isso está se tornando um problema, porque o tamanho da orelha está começando a crescer fora de proporção.

Eu gostaria de usar Maven para calcular dependências e colocar tudo frascos comum a várias guerras para a raiz da orelha.

Eu tentei organizar meu projeto usando arquétipo J2EE (maven-arquétipo-j2ee-simples), mas todas as guerras ainda estão embalados com dependências dentro do WEB-INF / lib. Existe uma maneira de fazer Maven dependências calcular comuns e colocá-los a orelha, assim como ele é capaz de calcular todas as dependências de transição na construção de uma guerra ou um frasco?

Foi útil?

Solução

Criar um novo artefato chamados commons-frascos e empacotá-lo como pom. Deve depender de todos os frascos comuns que você está usando -. Spring, Hibernate, Log4j, etc

Então, em cada um em suas guerras adicioná-lo como dependência com escopo "fornecido" (e não se esqueça de definir o tipo como pom). Você será capaz de vê-lo em seu caminho de classe, mas eles não serão embalados para a guerra. Desta forma, você também pode ter dependências específicas guerra embalados para ele, que a solução de guerras magras não fornece.

Outras dicas

Como você mencionou em um comentário, uma tarefa de TI do Maven para calcular cada dependência. Quando você está criando um artefato, com cada dependência comum, então você também vai ter que adivinhar, quais dependências pertencem lá.

Também poderia ser possível, que você tem que implantar uma guerra, com a sua dependência em outra máquina sem uma orelha, uma quando você definir cada dependência guerra para fornecido, então você está preso novamente.

A única maneira certa, para obter guerras magras é a partir dos exemplos: http://maven.apache.org/plugins/maven com guerras plugin / examples / skinny-wars.html

Mas, e agora vem a parte interessante, há uma grande! atalho (que completamente tira a dor mencionados), para dizer Maven, quais dependências suas guerras.

Go dentro do seu EAR-Module um declarar uma segunda dependência na guerra com o tipo pom para cada dependência WAR.

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

Agora, cada WAR serão empacotados de forma independente com o seu próprio dependências eo EAR serão embalados com as guerras skinny e cada dependência dentro da pasta lib

Update:

Tenha em mente, que a pasta ouvido / lib não pode ser usado para cada frasco dependência em um recipiente estrita como bibliotecas JBoss EAP 6. JSF componentes como tomahawk, Primefaces, etc. têm de residir em WEB-INF / lib pasta.

Uma maneira prática para alcançar este objectivo com o acima descrito solução é fazer uma exclusão para a biblioteca de componentes nos ouvidos pom.xml como esta:

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

Agora, cada dependência do WAR será colocado no ouvido / lib exceto a biblioteca de componentes que serão colocados em WEB-INF / lib dentro do WAR

Você pode definir o dependências âmbito para "forneceu". Isso significa que eles serão fornecidas por algum outro módulo e não será incluído no pote final ou guerra.

Talvez a montagem de encaixe pode ajudá-lo quando embalagem até a final EAR e lugar comum frascos lá.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top