Come far posto Maven tutti i vasetti comune per guerre all'interno dello stesso orecchio a orecchio root?

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

Domanda

Abbiamo una soluzione con numerose guerre. Le guerre sono simili, nel senso che tutti usano hibernate e la primavera. Questo significa che abbiamo un certo numero di vasi stessi all'interno di ogni guerra. Questo sta diventando un problema, perché la dimensione dell'orecchio sta iniziando a crescere a dismisura.

Vorrei usare Maven per calcolare le dipendenze e di mettere tutti i vasi comuni a più guerre alla radice dell'orecchio.

Ho provato a organizzare il mio progetto utilizzando J2EE archetipo (Maven-archetipo-J2EE-semplice), ma tutte le guerre sono ancora confezionato con le dipendenze all'interno del WEB-INF / lib. C'è un modo per rendere Maven calcolare dipendenze comuni e metterli a EAR, come egli è in grado di calcolare tutte le dipendenze di transizione durante la costruzione di una guerra o di un barattolo?

È stato utile?

Soluzione

creare un nuovo manufatto di nome Commons-giare e confezionare come pom. Si dovrebbe dipendere tutti i vasi più comuni in uso -. Spring, Hibernate, Log4j, etc

Poi, in ciascuna delle vostre guerre aggiungerlo come dipendenza con l'ambito "previsto" (e non dimenticate di impostare il tipo di pom). Sarete in grado di vedere nel classpath, ma non saranno confezionati in guerra. In questo modo si può anche avere guerra specifico dipendenze confezionati in esso, che la soluzione da guerre magre non fornisce.

Altri suggerimenti

Come si è accennato in un commento, il compito di di Maven per calcolare ogni dipendenza. Quando si crea un artefatto, con ogni dipendenza comune, allora avrete anche indovinare, quali le dipendenze ci appartengono.

Potrebbe anche essere possibile, che si deve distribuire una guerra, con le sue dipendenze da un'altra macchina, senza un orecchio, una quando si imposta ogni dipendenza guerra condizione, allora sei bloccato di nuovo.

L'unico modo giusto, per ottenere le guerre magre è dagli esempi: http://maven.apache.org/plugins/maven -war-plugin / examples / skinny-wars.html

Ma, e ora arriva la parte interessante, v'è un grande! scorciatoia (che prende completamente via il dolore citato), per dire Maven, che dipendenze vostre guerre sono.

Vai all'interno dell'orecchio-Module un dichiarare una seconda dipendenza WAR con il tipo di pom per ogni dipendenza 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>

Ora, ogni guerra verrà confezionato in modo indipendente con le proprie dipendenze e l'orecchio sarà confezionato con le guerre magro ed ogni dipendenza all'interno della cartella lib

Aggiornamento:

Tenete a mente, che la cartella orecchio / lib non può essere utilizzato per ogni barattolo di dipendenza in un contenitore stretto come JBoss EAP 6. librerie JSF componenti come tomahawk, primefaces, ecc devono risiedere in WEB-INF / lib cartella.

Un modo pratico per raggiungere questo obiettivo con la soluzione sopra descritta è quello di facilitare l'esclusione della libreria dei componenti nel pom.xml orecchie come questo:

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

Ora ogni dipendenza della guerra sarà messo in orecchio / lib, tranne la libreria di componenti che sarà posto in WEB-INF / lib all'interno della GUERRA

È possibile impostare il dipendenze portata per "fornito". Questo significa che saranno forniti da qualche altro modulo e non saranno inclusi nel vaso finale o la guerra.

Forse il plugin di montaggio può aiutarvi a quando il confezionamento il finale EAR e luogo vasi comuni là.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top