Maven ear plugin konfigurieren

DaBe1812

Bekanntes Mitglied
Hi,

ich habe mein Projekt relativ erfolgreich von Eclipse nach IntelliJ und von Ant nach Maven transportiert.
Wenn ich in Maven als packaging war angebe, dann bekomme ich auch ein sauberes war-file, welches ich im lokalen Server sauber testen kann.

Für die Testumgebung brauche ich aber ein EAR-File und jetzt wird es mir scheinbar zu kompliziert.

Ich habe das packaging einfach auf ear gestellt und statt dem war-plugin das ear-plugin verwendet.
Wenn ich das aber jetzt einfach mit dem package-goal builde, dann erhalte ich ein ear-file, in dem es kein war-file gibt.
Es wurden lediglich die externen Ressourcen hinein gemappt, die ich eigentlich im WEB-INF/lib erwarte.

Ich versuche zwar mich durch die Dokumentation durch zu arbeiten, aber es ist immer doof, wenn man nicht weiß, wie das heißt, was man sucht.

Anbei mal mein altes ant-build:
XML:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xml>
<project name="myProject" basedir="." default="makeear" xmlns:wlp="antlib:net.wasdev.wlp.ant">

    <property file = "build.properties"/>
    <property name = "build.dir" value = "${web.dir}/WEB-INF/classes"/>

    <path id = "master-classpath">
        <fileset dir = "${lib.dir}">
            <include name = "*.jar"/>
        </fileset>
        <pathelement path = "${build.dir}"/>
    </path>
    
    <target name = "clean" description = "Clean output directories">
        <delete dir="${build.dir}"/>
    </target>

    <target name = "build" depends = "clean" description = "Compile main source tree java files">
        <mkdir dir = "${build.dir}"/>
          
        <javac destdir = "${build.dir}" debug = "true"
            deprecation = "false" optimize = "false" failonerror = "true"
            encoding="ISO-8859-1" includeantruntime="false">
            
            <src path = "${src.dir}"/>
            <classpath refid = "master-classpath"/>
        </javac>
        <mkdir dir="${ressource.dir}"/>
    </target>

    <target name="copyressources" depends="build">
        <copy todir = "${ressource.dir}" preservelastmodified = "false" overwrite="true">
            <fileset dir = "${src.dir}/main/resources" />
        </copy>
    </target>

    <target name = "makewar" depends = "copyressources">
        <war destfile = "${name}.war" webxml = "${web.dir}/WEB-INF/web.xml">
            <fileset dir = "${web.dir}">
                <include name = "**/*.*"/>
            </fileset>
        </war>
    </target>

    <target name="makeear" depends="makewar" description="Creates Ear-File">
        <tar destfile="${name}-properties.tar" basedir="${tar.dir}"/>

        <ear destfile="${name}.ear" appxml="${meta.dir}/application.xml">
            <metainf dir="${web.dir}/META-INF"/>
            <fileset dir = ".">
                <include name="*.war"/>
                <exclude name="META-INF/application.xml"/>
            </fileset>
        </ear>

        <delete file="${name}.war"/>
    </target>
</project>

Bitte nicht die Kleinigkeiten bemängeln, ich will im Maven einiges besser machen, z.B. mal ein "ordentliches" Encoding verwenden.

Aber wo ich so drüber nachdenke:
Habe ich vielleicht einen Denkfehler im Gesamtkonzept?
Ist meine Anwendung evtl. eigentlich ein Modul in meinem Projekt?
Also bräuchte ich eigentlich ein Modul, welches in der pom als packaging war stehen hat.
Darüber habe ich dann das "HauptModul" welches in der Pom als packaging ear hat und als einzige dependency das Modul?
 

Oneixee5

Top Contributor
Ich weiß selbst nicht ob ich alles richtig mache.
Ein Web-Projekt ist ein WAR, es nützt nichts einfach das Packaging zu ändern. Du benötigst eine zweite pom.xml/EAR-Projekt welches das EAR baut. Im EAR können mehrere WAR oder EJB/.jar enthalten sein. Genaugenommen verwende ich mind. 3 Projekte, ein (oder mehr) Web-Projekte/WAR/JAR, ein EAR-Projekt, sowie ein Build-Projekt(pom.xml), welches alle anderen Projekte in der richtigen Reihenfolge baut - sowie den Kopiervorgang und das Deployment auf die Server durchführt. So sind Pfade und andere Abhängigkeiten nur im Build-Projekt vorhanden.
 

khmarbaise

Mitglied
Die Info hier mindest zwei Projekte... eines EAR und ein anderes, dass den Code enthält... Grundstruktur hier zu finden (https://github.com/khmarbaise/javaee-example) Plugins u.U. auf neueren Stand bringen... Verzeichnisstruktur src/main/java bzw. src/main/test und für das WAR src/main/webapp etc. ist so weit klar? Plugins sauber per pluginManagement definieren.... Die Build Reihenfolge wird Anhand der Abhängigkeiten definiert... einfach eine Abhängigkeit zum WAR Module im EAR Module somit wird automatisch in der richtigen Reihenfolge gebaut... nicht auf die Reihenfolge im parent (Build-Projekt) verlassen....
 

khmarbaise

Mitglied
Ich weiß selbst nicht ob ich alles richtig mache.
Ein Web-Projekt ist ein WAR, es nützt nichts einfach das Packaging zu ändern. Du benötigst eine zweite pom.xml/EAR-Projekt welches das EAR baut. Im EAR können mehrere WAR oder EJB/.jar enthalten sein. Genaugenommen verwende ich mind. 3 Projekte, ein (oder mehr) Web-Projekte/WAR/JAR, ein EAR-Projekt, sowie ein Build-Projekt(pom.xml), welches alle anderen Projekte in der richtigen Reihenfolge baut - sowie den Kopiervorgang und das Deployment auf die Server durchführt. So sind Pfade und andere Abhängigkeiten nur im Build-Projekt vorhanden.
Reihenfolge immer mithilfe von Abhängigkeiten definieren... nicht auf die Reihenfolge im Build-Projekt (aka parent) verlassen...(Beispielsweise: https://github.com/khmarbaise/javaee-example/blob/main/service/pom.xml dependency auf "service-client"...
Kopiervorgang?
 

DaBe1812

Bekanntes Mitglied
Das Beispiel werde ich mir morgen mal anschauen. Aktuell ist ja alles in einem Modul, das will ich aber zukünftig aufteilen. Jetzt muss das erstmal funktionieren und dann pushe ich das mal wieder, damit die anderen im Projekt nicht zu viel Konflikte beim rebase haben. Zukünftig werden wir wohl ein Modul für DB-Operationen haben, eins für das Backend, eins für REST und eins für das Frontend, aber das kommt vielleicht nächstes Jahr.
Hab jetzt erstmal erfolgreich alles in ein eigenes Modul gepackt und bekomme wieder eine saubere WAR.
Hab ich auch, ich muss sogar ein paar Dateien in ein tar-file packen, damit ich deployen kann.
 

khmarbaise

Mitglied
Das Beispiel werde ich mir morgen mal anschauen. Aktuell ist ja alles in einem Modul, das will ich aber zukünftig aufteilen. Jetzt muss das erstmal funktionieren und dann pushe ich das mal wieder, damit die anderen im Projekt nicht zu viel Konflikte beim rebase haben. Zukünftig werden wir wohl ein Modul für DB-Operationen haben, eins für das Backend, eins für REST und eins für das Frontend, aber das kommt vielleicht nächstes Jahr.
Hab jetzt erstmal erfolgreich alles in ein eigenes Modul gepackt und bekomme wieder eine saubere WAR.

Hab ich auch, ich muss sogar ein paar Dateien in ein tar-file packen, damit ich deployen kann.
Tar-File kann man mit dem maven-assembly-plugin erstellen, da braucht man nichts zu kopieren (in dem Beispielprojekt ist auch maven-assembly-plugin drin...https://github.com/khmarbaise/javaee-example/tree/main/assembly) ... Welche Art von Dateien werden da benötigt? Ein EAR ist für einen Application Server genug? Module DB-Operationen?
 

DaBe1812

Bekanntes Mitglied
Also ich brauche das ear und daneben kann ich noch ein tar legen, in dem files liegen, die dann auf dem Server in einem conifg-ordner agelegt werden.
Und kopieren macht dann z.B. Sinn, wenn du in einen target-folder buildest und dann die Dateien in ein verzeichnis kopieren musst für einen Webserver.
Wir haben z.B. ein leeres File mit einem fixen Namen, dass den Server zwingt neue Sourcen zu importieren und neu zu starten.
 

DaBe1812

Bekanntes Mitglied
Neuer Tag, neues Glück.
Also habe jetzt angefangen und ein "app" Modul in mein Projekt gezaubert. Die POM ist recht übersichtlich:
XML:
<?xml version="1.0" encoding="UTF-8"?>
<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>intern.project</groupId>
        <artifactId>project</artifactId>
        <version>3.7.0-SNAPSHOT</version>
    </parent>

    <artifactId>app</artifactId>
    <packaging>ear</packaging>

    <dependencies>
        <dependency>
            <groupId>intern.project</groupId>
            <artifactId>backend</artifactId>
            <version>3.7.0-SNAPSHOT</version>
            <type>war</type>
        </dependency>
    </dependencies>
</project>

Wenn ich das jetzt versuche zu builden, dann meckert Maven, dass
Code:
Failed to collect dependencies at intern.project:backend:war:3.7.0-SNAPSHOT:
Failed to read artifact descriptor for intern.project:backend:war:3.7.0-SNAPSHOT:
The following artifacts could not be resolved: intern.project:project:pom:3.7.0-SNAPSHOT (absent): intern.project:project:pom:3.7.0-SNAPSHOT was not found in https://nexus.intern/repository/public/ during a previous attempt. This failure was cached in the local repository and resolution is not reattempted until the update interval of nexus has elapsed or updates are forced -> [Help 1]

Also scheinbar versucht er die Dateien aus unserem internen Nexus ab zu holen, da kommen die aber nicht rein. Es ist doch alles lokal da, soll er es von da nehmen.

Dazu sagen muss ich, dass ich mit dem goal package auf der app-pom ausgeführt habe. War da vielleicht der Fehler?
 

DaBe1812

Bekanntes Mitglied
Okay, hab es gelöst, ich hab das build-plugin in das app-modul mit gepackt und jetzt tut es.
Außerdem hab ich ein wenig rumkonfiguriert, damit die Dateinamen passen, weil das für die Automatismen wichtig ist.
Meine beiden poms sehen jetzt so aus.
Backend:
XML:
<?xml version="1.0" encoding="UTF-8"?>
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <artifactId>atc</artifactId>
        <groupId>intern.atc</groupId>
        <version>3.7.0-SNAPSHOT</version>
    </parent>

    <groupId>intern.atc</groupId>
    <artifactId>backend</artifactId>
    <version>3.7.0-SNAPSHOT</version>
    <name>backend</name>
    <packaging>war</packaging>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.target>11</maven.compiler.target>
        <maven.compiler.source>11</maven.compiler.source>
        <junit.version>5.9.2</junit.version>
    </properties>

    <dependencies>
        ...
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>3.3.2</version>
                <configuration>
                    <warName>atc</warName>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

App:
XML:
<?xml version="1.0" encoding="UTF-8"?>
<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>intern.atc</groupId>
        <artifactId>atc</artifactId>
        <version>3.7.0-SNAPSHOT</version>
    </parent>

    <artifactId>app</artifactId>
    <packaging>ear</packaging>

    <dependencies>
        <dependency>
            <groupId>intern.atc</groupId>
            <artifactId>backend</artifactId>
            <version>3.7.0-SNAPSHOT</version>
            <type>war</type>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-ear-plugin</artifactId>
                <version>3.2.0</version>
                <configuration>
                    <finalName>atc</finalName>
                    <modules>
                        <webModule>
                            <groupId>intern.atc</groupId>
                            <artifactId>backend</artifactId>
                            <uri>atc.war</uri>
                            <bundleFileName>atc.war</bundleFileName>
                            <contextRoot>/atc</contextRoot>
                        </webModule>
                    </modules>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

Dazu direkt die Frage: ist da irgendetwas konfiguriert, was raus sollte, oder sinnlos ist? Technisch gesehen wäre mir sogar egal, wie die war-Datei heißt, Hauptsache sie ist unter dem richtigen contextRoot erreichbar.
 

DaBe1812

Bekanntes Mitglied
Ich muss auch ehrlich sagen, auch wenn ich jetzt statt ein Projekt in Eclipse mit meinem build.xml für ANT, aktuell drei Module habe und in jedem eine POM, finde ich es doch ein wenig übersichtlicher, weil ich einfach nur jeden einzelnen Schritt in seiner eigenen POM erledige.

Also um es lokal zu testen brauche ich das war-file, dann muss zum Start des lokalen Servers auch nur das build dafür durchgeführt werden.
Um es im Test zu deployen brauche ich das ear-file und das tar-file, also muss ich die beiden builds ausführen und das ear-build führt implizit das war-build aus.

Tar-file habe ich mittlerweile geschafft:
XML:
<?xml version="1.0" encoding="UTF-8"?>
<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>intern.atc</groupId>
        <artifactId>atc</artifactId>
        <version>3.7.0-SNAPSHOT</version>
    </parent>

    <artifactId>appasm</artifactId>
    <version>3.7.0-SNAPSHOT</version>
    <packaging>pom</packaging>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>3.6.0</version>
                <configuration>
                    <finalName>atc-properties</finalName>
                    <appendAssemblyId>false</appendAssemblyId>
                    <descriptors>
                        <descriptor>src/assembly/asm.xml</descriptor>
                    </descriptors>
                </configuration>
                <executions>
                    <execution>
                        <id>create-archive</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

Sieht jetzt auch gut aus. Jetzt tüftle ich gerade am vorerst letzten Schritt:
Das tar-file und das ear-file hätte ich gerne mit einem weiteren File an einem Ort zusammen kopiert. Da das automatische Deployment mittlerweile nicht mehr über das Filesystem geht, würde mir ein Ordner im Projekt reichen. Und das wäre auch quasi das "maximal" Build, also darüber gibt es keine weiter Stufe bei uns, alles danach läuft mit Harvest und Co.

Also die erste Frage, das letzte Build dann in der root-pom, oder wieder ein eigenes Modul dafür?
 

khmarbaise

Mitglied
Also ich brauche das ear und daneben kann ich noch ein tar legen, in dem files liegen, die dann auf dem Server in einem conifg-ordner agelegt werden.
Und kopieren macht dann z.B. Sinn, wenn du in einen target-folder buildest und dann die Dateien in ein verzeichnis kopieren musst für einen Webserver.
Wir haben z.B. ein leeres File mit einem fixen Namen, dass den Server zwingt neue Sourcen zu importieren und neu zu starten.
Das TAR Erzeugen kann man ja einfach per maven-assembly-plugin.. hatte ich ja schon erwähnt..
config-ordner? Restart des Servers? Das wird eigentlich automatisch mit dem Deployment auf den Server gemacht? Oder habt Ihr ein Cluster von App Servern? Configs sollte man typischerweise aus einem Konfig System wie z.B. etcd o.ä. ziehen...
 

khmarbaise

Mitglied
Okay, hab es gelöst, ich hab das build-plugin in das app-modul mit gepackt und jetzt tut es.
Außerdem hab ich ein wenig rumkonfiguriert, damit die Dateinamen passen, weil das für die Automatismen wichtig ist.
Meine beiden poms sehen jetzt so aus.
Backend:
XML:
<?xml version="1.0" encoding="UTF-8"?>
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <artifactId>atc</artifactId>
        <groupId>intern.atc</groupId>
        <version>3.7.0-SNAPSHOT</version>
    </parent>

    <groupId>intern.atc</groupId>
    <artifactId>backend</artifactId>
    <version>3.7.0-SNAPSHOT</version>
    <name>backend</name>
    <packaging>war</packaging>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.target>11</maven.compiler.target>
        <maven.compiler.source>11</maven.compiler.source>
        <junit.version>5.9.2</junit.version>
    </properties>

    <dependencies>
        ...
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>3.3.2</version>
                <configuration>
                    <warName>atc</warName>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

App:
XML:
<?xml version="1.0" encoding="UTF-8"?>
<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>intern.atc</groupId>
        <artifactId>atc</artifactId>
        <version>3.7.0-SNAPSHOT</version>
    </parent>

    <artifactId>app</artifactId>
    <packaging>ear</packaging>

    <dependencies>
        <dependency>
            <groupId>intern.atc</groupId>
            <artifactId>backend</artifactId>
            <version>3.7.0-SNAPSHOT</version>
            <type>war</type>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-ear-plugin</artifactId>
                <version>3.2.0</version>
                <configuration>
                    <finalName>atc</finalName>
                    <modules>
                        <webModule>
                            <groupId>intern.atc</groupId>
                            <artifactId>backend</artifactId>
                            <uri>atc.war</uri>
                            <bundleFileName>atc.war</bundleFileName>
                            <contextRoot>/atc</contextRoot>
                        </webModule>
                    </modules>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

Dazu direkt die Frage: ist da irgendetwas konfiguriert, was raus sollte, oder sinnlos ist? Technisch gesehen wäre mir sogar egal, wie die war-Datei heißt, Hauptsache sie ist unter dem richtigen contextRoot erreichbar.
Die Festlegunt für die Compiler Version bzw. die Target Version sollte man einmal in der root POM per:
XML:
<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.release>11</maven.compiler.release>
</properties>
festelegen..
Die Plugin Versionen der Plugins sollten auch in der root-pom per pluginManagement definiert werden... und nur einmal...(oder mithilfe einer Unternehmensweiten Parent POM):
Im EAR Module würde halt nur das EAR erzeugen lassen (https://github.com/khmarbaise/javaee-example/blob/main/app/pom.xml)
Und für die Erzeugung der tar's würde ich halt auch eine separates Modul machen... Separation of convern folgend.
Die Version für die Abhängigkeit (war) könnte man noch per <version>${project.version}</version> festlegen..
Die Abhängigkeiten für z.B. Junit Jupiter auch per BOM in der Root POM festlegen (junit-bom) (Siehe beispiel in der Root POM https://github.com/khmarbaise/javaee-example/blob/main/pom.xml)

Auch immer drauf achten, dass aktuelle Plugin Versionen verwendet werden (https://maven.apache.org/plugins/)
Gilt für Maven selbst im übrigen auch (akuell 3.9.9)...
 

khmarbaise

Mitglied
Sieht jetzt auch gut aus. Jetzt tüftle ich gerade am vorerst letzten Schritt:
Das tar-file und das ear-file hätte ich gerne mit einem weiteren File an einem Ort zusammen kopiert. Da das automatische Deployment mittlerweile nicht mehr über das Filesystem geht, würde mir ein Ordner im Projekt reichen. Und das wäre auch quasi das "maximal" Build, also darüber gibt es keine weiter Stufe bei uns, alles danach läuft mit Harvest und Co.

Also die erste Frage, das letzte Build dann in der root-pom, oder wieder ein eigenes Modul dafür?
Dann würd ich u.U. das zusätzliche File(s) in ein separates Module legen... und dann mit assembly entsprechend zusammen packen...
Die Frage ist, muss der Ordner noch weitere Datei(en) enthalten ? wenn ja würde da dann wieder das separate Module bevorzugen... ?
 

DaBe1812

Bekanntes Mitglied
So, jetzt sieht das Build-Ergebnis so aus, wie das damals von ANT.
Aktuell habe ich also vier Module in meinem Root.
XML:
<?xml version="1.0" encoding="UTF-8"?>
<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>
    <groupId>intern.atc</groupId>
    <artifactId>atc</artifactId>
    <version>3.7.0-SNAPSHOT</version>
    <packaging>pom</packaging>

    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <junit.version>5.9.2</junit.version>
        <war-plugin.version>3.3.2</war-plugin.version>
        <ear-plugin.version>3.3.0</ear-plugin.version>
        <assembly-plugin.version>3.7.0</assembly-plugin.version>
        <resources-plugin.version>3.3.1</resources-plugin.version>
        <applicationName>atc</applicationName>
    </properties>

    <modules>
        <module>backend</module>
        <module>app</module>
        <module>app_assembly</module>
        <module>copy</module>
    </modules>

   <repositories>
        <repository>
            <id>lib_id</id>
            <url>file://C:/Projekte/IdeaProjects/atc/external/primefaces-extensions-13.0.8-jakarta.jar</url>
        </repository>
    </repositories>

    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-war-plugin</artifactId>
                    <version>${war-plugin.version}</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-ear-plugin</artifactId>
                    <version>${ear-plugin.version}</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-assembly-plugin</artifactId>
                    <version>${assembly-plugin.version}</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-resources-plugin</artifactId>
                    <version>${resources-plugin.version}</version>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>
</project>

Das sind auch aktuell die höchsten Versionen, die in unserer Firma freigegeben sind.
backend ist quasi im Moment einfach alles, d.h. alle Java-Klassen und alles, was das Frontend an geht. Das wird als war-gebuildet und ist auch meine Quelle, wenn ich den Server lokal starte.
Dann kommt app, das wird als ear gebuildet und beinhaltet backend.
Danach kommt app_assembly, da wird das Tar-File gapackt. Den Inhalt habe ich in den Sourcen des Moduls, d.h. ergänzungen an Files können einfach in die Sourcen mit reingeworfen werden und werden mit verpackt.
Zuletzt kommt dann das copy, das zieht sich aus app das ear-File, aus assembly das tar-file und aus seinen eigenen sourcen das leere Steuer-File und packt alles in root on den Target-Folder.
Führt dazu, dass wenn ich das gesamte Projekt builde, dann habe ich in root in Target alle Files, die ich brauche, und wenn ich ein clean mache, dann ist alles restlos entfernt.

Noch eine Frage zum Plugin Management:
Reicht das so? Ich habe in euren Beispielen gesehen, dass ihr da theoretisch alle Konfigurationen, die ich jetzt in den Modul-Poms habe, mit rein schreibt. Da ich auf feste Datei-Namen angewiesen bin, habe ich die natürlich auch in den Poms definiert.
 

khmarbaise

Mitglied
Ganz merkwürdig das Repository mit der primefaces-extension... warum? Ist doch in Central verfügbar... macht somit wenig sinn und führt nur zu Problemen... ?

1. die ganzen Properties sind nicht notwendig. Da die Versionsnummern nur einmal verwendet werden, kann man die auch direkt in pluginManagement zu jeweiligen Plugin schreiben.
Ich hatte ja schon darauf hingewiesen, dass die source/target besser mithilfe <maven.compiler.release>11</maven.compiler.release> definiert werden (seit JDK9+).

2. JUnit Jupiter sehe ich nicht als BOM (via dependencyManagement). in der root pom (da wo die modules liste steht)..
3. Alle Konfigurationen, die in den Sub-teilen allgmemein sind können auf die oberste Ebene gezogen werden (Refactoring!)
4. Fest Datei-Namen bei einem Appliakationsserver hört sich komisch an... u.U. das EAR File selbst? Aber die WAR-Datei etc.?
5. Alle Verisonen von Abhängigkeiten per dependencyManagement im Root definieren ... dann brauch man in den Sub-Modulen nur noch groupId/artifactId und u.U. den scope zu definieren... (Zentrale Anlaufstelle für Abhängigkeiten und Updates). (siehe https://github.com/khmarbaise/javaee-example/blob/main/pom.xml)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Maven JAR Plugin Probleme Tools - Maven, Gradle, Ant & mehr 4
H Maven maven-source-plugin is missing Tools - Maven, Gradle, Ant & mehr 5
LimDul Maven Maven Surefire Plugin - Warnings upgrade Tools - Maven, Gradle, Ant & mehr 2
H Jenkins - maven-jar-plugin - kein jar-file Tools - Maven, Gradle, Ant & mehr 38
H Maven Anfängerproblem - No plugin found for prefix 'archetype' in the current project and in the plugin groups Tools - Maven, Gradle, Ant & mehr 25
D [Maven Pluginentwicklung] - Plugin das nur auf Parent pom läuft Tools - Maven, Gradle, Ant & mehr 0
S Maven buildnumber-maven-plugin / Formatproblem mit timestamp Tools - Maven, Gradle, Ant & mehr 17
D [Maven] neuerdings "No plugin found for prefix ..." errors Tools - Maven, Gradle, Ant & mehr 7
L Maven Unable to download maven-copy-plugin Tools - Maven, Gradle, Ant & mehr 10
Chris81T Maven Hilfe bei EAR packaging mit maven-ear-plugin Tools - Maven, Gradle, Ant & mehr 1
maestr0 Maven Plugin Entwicklungs Buch für Einsteiger Tools - Maven, Gradle, Ant & mehr 8
D [maven] problem mit konfiguration von cargo plugin Tools - Maven, Gradle, Ant & mehr 4
D [Maven] problem mit plugin - es fehlen "dubug informationen" Tools - Maven, Gradle, Ant & mehr 8
E Maven maven-jaxb2-plugin proxy Tools - Maven, Gradle, Ant & mehr 4
K MAVEN Plugin erzeugen Tools - Maven, Gradle, Ant & mehr 7
D gwt-maven-plugin und Eclipse Tools - Maven, Gradle, Ant & mehr 1
B Maven build-helper-maven-plugin mit Eclipse Tools - Maven, Gradle, Ant & mehr 3
M eigenes Plugin erstellen Maven Tools - Maven, Gradle, Ant & mehr 4
S Maven Profiles - maven-exec-plugin Tools - Maven, Gradle, Ant & mehr 4
S Maven Webstart Plugin Tools - Maven, Gradle, Ant & mehr 7
P Maven Release Plugin - überschreiben der POM verhindern? Tools - Maven, Gradle, Ant & mehr 5
J Maven Assembly-Plugin und Dependencies Tools - Maven, Gradle, Ant & mehr 4
M maven-jaxb-plugin Tools - Maven, Gradle, Ant & mehr 1
F Maven Fehler Tools - Maven, Gradle, Ant & mehr 11
R Maven erzeugt package ohne Bibliotheken (Libaries, Dependencies) Tools - Maven, Gradle, Ant & mehr 10
Oneixee5 Maven deploy - per SSH Tools - Maven, Gradle, Ant & mehr 6
H Maven kein Hauptmanifestattribut Tools - Maven, Gradle, Ant & mehr 10
M Programm mit Maven erstellen und starten samt Abhängigkeiten Tools - Maven, Gradle, Ant & mehr 27
D Interne Dependencies in Maven Tools - Maven, Gradle, Ant & mehr 51
J log4j2 mit Hibernate über Maven Tools - Maven, Gradle, Ant & mehr 10
thor_norsk Maven Build Failed: kann nicht von start.spring.io generiertes Projekt auf IntelliJ IDE starten Tools - Maven, Gradle, Ant & mehr 8
H Maven JUnit5 Tests werden ignoriert Tools - Maven, Gradle, Ant & mehr 5
thor_norsk Maven Tools - Maven, Gradle, Ant & mehr 32
ExceptionOfExpectation Maven Build Failed: kann nicht von start.spring.io generiertes Projekt auf Eclipse starten Tools - Maven, Gradle, Ant & mehr 20
Ich kann Maven nicht als UmgebungsVariable hinzufügen Tools - Maven, Gradle, Ant & mehr 2
W Was "braucht" man denn alles? Maven, Ant, Git, ... Tools - Maven, Gradle, Ant & mehr 21
N Fehler beim Imgui mit Maven Tools - Maven, Gradle, Ant & mehr 7
M Spring Boot Maven pom.xml-Eintrag Tools - Maven, Gradle, Ant & mehr 17
Encera JavaFX und Maven funktioniert nicht Tools - Maven, Gradle, Ant & mehr 1
B maven multi module Projekt und unnötige/zusätzliche Leerzeilen Tools - Maven, Gradle, Ant & mehr 4
J Maven Konfusion Tools - Maven, Gradle, Ant & mehr 7
Tippster Maven Sqlite integrieren (Eclipse, Maven) Tools - Maven, Gradle, Ant & mehr 4
T Image kreieren mit Maven bei JavaFX und nicht modularen Jars Tools - Maven, Gradle, Ant & mehr 12
T JSON Dependencies in Maven Tools - Maven, Gradle, Ant & mehr 7
T JavaFX, Jar über Maven kreieren Tools - Maven, Gradle, Ant & mehr 2
Encera Libraries Maven Projekt hinzufügen Tools - Maven, Gradle, Ant & mehr 9
Oneixee5 Maven Phase Tools - Maven, Gradle, Ant & mehr 3
Robertop maven copy-resources nicht in WAR Datei Tools - Maven, Gradle, Ant & mehr 2
T Maven: Probleme beim Einbinden der Dependencies Tools - Maven, Gradle, Ant & mehr 9
M Mit Maven eine jar Datei bauen ohne irgendeine main Methode Tools - Maven, Gradle, Ant & mehr 1
M Mit Maven eine jar Datei Bauen ohne irgendeine main Methode Tools - Maven, Gradle, Ant & mehr 18
H Maven Maven: <mainClass>NAME?</mainClass> Tools - Maven, Gradle, Ant & mehr 13
M Missing Artifact on selbst gehostestes Maven Paket Tools - Maven, Gradle, Ant & mehr 8
M Error code 409 maven Tools - Maven, Gradle, Ant & mehr 5
M github + maven Fehler beim repository erstellen Tools - Maven, Gradle, Ant & mehr 1
M durch Maven wird "var" nicht gefunden Tools - Maven, Gradle, Ant & mehr 4
N Maven Intellij Maven Projekt erstell keine src Tools - Maven, Gradle, Ant & mehr 4
LimDul Maven Einzelne Unit Tests in Maven Builds skippen Tools - Maven, Gradle, Ant & mehr 3
M Maven jpackage-image wird nicht gefunden Tools - Maven, Gradle, Ant & mehr 22
M javafx wird in einem alten programm nicht bei maven gefunden Tools - Maven, Gradle, Ant & mehr 15
L Maven IntelliJ, Maven und JavaFX + SceneBuilder Tools - Maven, Gradle, Ant & mehr 23
von Spotz Maven und Spring: "Add to classpath" ? Tools - Maven, Gradle, Ant & mehr 29
Kirby.exe Projekt mit Maven kompilieren Tools - Maven, Gradle, Ant & mehr 13
P Maven Projekt Abhängigkeiten auf bekante Schwachstellen prüfen Tools - Maven, Gradle, Ant & mehr 4
H Maven dependency Problem ? Tools - Maven, Gradle, Ant & mehr 23
B Maven und Intellij Tools - Maven, Gradle, Ant & mehr 24
P Maven Test werden nicht ausgeführt . Junit . Maven . Surefire . Eclipse Tools - Maven, Gradle, Ant & mehr 12
yakazuqi Maven Eigene API mit Maven einbinden Tools - Maven, Gradle, Ant & mehr 1
M Was ist besser für den Anfang, Maven oder Gradle? Tools - Maven, Gradle, Ant & mehr 6
P Maven Wie die Maven Project version in JSP page verwenden? Tools - Maven, Gradle, Ant & mehr 2
C Maven Multi-Module Projekt Tools - Maven, Gradle, Ant & mehr 2
T Maven Warnings/Fehlermeldungen Tools - Maven, Gradle, Ant & mehr 12
T Maven und Datenbank(treiber) Tools - Maven, Gradle, Ant & mehr 13
T Maven Runnable Jar Tools - Maven, Gradle, Ant & mehr 5
T Grundlagen Maven und Git/Github Tools - Maven, Gradle, Ant & mehr 2
G Maven upload Tools - Maven, Gradle, Ant & mehr 0
K Maven - Parent oder Dependency? Tools - Maven, Gradle, Ant & mehr 5
B Maven Maven deploy Tools - Maven, Gradle, Ant & mehr 4
H Jenkins keine Tests gefunden - aber in Maven Tools - Maven, Gradle, Ant & mehr 30
P Mit Maven einen spezifischen Branch nach Tag-Parameter erstellen (in Jenkins-Job) Tools - Maven, Gradle, Ant & mehr 3
P Nur einen Teilbaum in Maven releasen? Tools - Maven, Gradle, Ant & mehr 7
D Cannot invoke "javafx.scene.control.MenuButton.getScene()" nach konvertierung zu maven Tools - Maven, Gradle, Ant & mehr 3
H Maven - keine Durchführung von Tests Tools - Maven, Gradle, Ant & mehr 12
P JavaFX jar mit Maven Tools - Maven, Gradle, Ant & mehr 9
P Maven & Intellij Modul kann nicht aufgelöst werden Tools - Maven, Gradle, Ant & mehr 12
H Eclipse JUnit erzeugt Fehler im Maven-Test Tools - Maven, Gradle, Ant & mehr 1
sascha-sphw Maven vs Gradle Tools - Maven, Gradle, Ant & mehr 24
D Maven Maven und die Build-Geschwindigkeit Tools - Maven, Gradle, Ant & mehr 11
K Maven IntelliJ + Maven + JavaFX Tools - Maven, Gradle, Ant & mehr 2
J Maven Mit Maven eine ZIP Datei erstellen Tools - Maven, Gradle, Ant & mehr 0
K Maven install schlägt fehl Tools - Maven, Gradle, Ant & mehr 10
I Problem: Maven import extern Lib Tools - Maven, Gradle, Ant & mehr 3
Tom299 Maven Maven funktioniert nach Installation nicht Tools - Maven, Gradle, Ant & mehr 1
I Maven Interface hinzugefügt - Error Tools - Maven, Gradle, Ant & mehr 1
M Verständnisfrage Maven Tools - Maven, Gradle, Ant & mehr 2
S Maven installieren - "Befehl wurde nicht gefunden" Tools - Maven, Gradle, Ant & mehr 1
E Maven: Wie Abhängigkeiten analysieren? Tools - Maven, Gradle, Ant & mehr 0
E Maven Maven distributionManagement Vererbung in child POM Tools - Maven, Gradle, Ant & mehr 8
P Maven Parent- Child POMs Tools - Maven, Gradle, Ant & mehr 13
E Release Kandidaten mit Maven bauen Tools - Maven, Gradle, Ant & mehr 4

Ähnliche Java Themen


Oben