Vraag Hoe maak je maven alle potten die gebruikelijk zijn voor oorlogen binnen dezelfde EAR naar EAR-root?


We hebben een oplossing met talloze oorlogen. Oorlogen zijn vergelijkbaar in de zin dat ze allemaal gebruikmaken van overwinteren en lente. Dit betekent dat we binnen elke oorlog een aantal dezelfde potten hebben. Dit wordt een probleem, omdat de grootte van het oor buiten proportie begint te groeien.

Ik zou Maven willen gebruiken om afhankelijkheden te berekenen en om alle potten die bij meerdere oorlogen horen, in de root van de EAR te plaatsen.

Ik probeerde mijn project te organiseren met j2ee archetype (maven-archetype-j2ee-simple), maar alle oorlogen zijn nog steeds verpakt met afhankelijkheden binnen de WEB-INF / lib. Is er een manier om Maven gemeenschappelijke afhankelijkheden te laten berekenen en ze naar EAR te brengen, net zoals hij in staat is om alle overgangsafhankelijkheden te berekenen bij het bouwen van een oorlog of een pot?


22
2018-05-11 16:35


oorsprong


antwoorden:


Maak een nieuw voorwerp met de naam commons-potten en verpak het als pom. Het zou moeten afhangen van alle gewone potten die u gebruikt - Spring, Hibernate, Log4j, etc.

Voeg vervolgens in elk van uw oorlogen het toe als afhankelijkheid van "verstrekt" bereik (en vergeet niet om het type in te stellen als pom). Je zult het in je klassenpad kunnen zien, maar ze zullen niet in de oorlog worden verpakt. Op deze manier kun je ook oorlogsspecifieke afhankelijkheden hebben die erin zijn ingepakt, wat de oplossing is magere oorlogen voorziet niet.


8
2018-06-18 13:54



Zoals je in een opmerking hebt vermeld, is het de taak van maven om elke afhankelijkheid te berekenen. Wanneer u een artefact maakt, met elke gemeenschappelijke afhankelijkheid, dan zult u ook moeten raden, welke afhankelijkheden daar thuishoren.

Het zou ook mogelijk kunnen zijn, dat je één oorlog moet inzetten, met zijn afhankelijkheden op een andere machine zonder oor, en wanneer je elke oorlogsafhankelijkheid instelt, dan zit je weer vast.

De enige juiste manier om magere oorlogen te krijgen, is uit de voorbeelden: http://maven.apache.org/plugins/maven-war-plugin/examples/skinny-wars.html

Maar nu komt het interessante deel, er is er één groot! snelkoppeling (die de genoemde pijn volledig wegneemt), om maven te vertellen, welke afhankelijkheden uw OORLOGEN hebben.

Ga naar binnen in je EAR-module en verklaar een tweede afhankelijkheid van de WAR met type pom voor elke WAR-afhankelijkheid.

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

Nu zal elke OORLOG onafhankelijk worden verpakt met zijn eigen afhankelijkheden en het OOR zal worden verpakt met magere OORLOGEN en elke afhankelijkheid binnen de lib-map

Bijwerken:

Houd er rekening mee dat de oor / lib-map niet kan worden gebruikt voor elke afhankelijkheids-jar in een strikte container zoals JBoss EAP 6. JSF Componentbibliotheken zoals tomahawk, primafaces, enz. Moeten zich in de map WEB-INF / lib bevinden.

Een handige manier om dit te bereiken met de hierboven beschreven oplossing is om als volgt een uitsluiting te maken voor de componentenbibliotheek in de EAR's 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>
...

Nu wordt elke afhankelijkheid van de OORLOG in oor / lib geplaatst, behalve de componentbibliotheek die in WEB-INF / lib in de WAR zal worden geplaatst


61
2018-03-05 17:14



U kunt de afhankelijkheden toepassingsgebied "geleverd". Dit betekent dat ze worden geleverd door een andere module en niet worden opgenomen in de laatste pot of oorlog.

Misschien is het assemblage plugin kan u helpen bij het verpakken van de uiteindelijke EAR en het plaatsen van gewone potten daar.


4
2018-05-11 18:56



http://maven.apache.org/plugins/maven-war-plugin/examples/skinny-wars.html


4
2018-06-05 21:48