Maven ear plugin konfigurieren

  • Themenstarter Gelöschtes Mitglied 68249
  • Beginndatum
G

Gelöschtes Mitglied 68249

Gast
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

Aktives 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

Aktives 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?
 
G

Gelöschtes Mitglied 68249

Gast
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

Aktives 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?
 
G

Gelöschtes Mitglied 68249

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

Gelöschtes Mitglied 68249

Gast
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?
 
G

Gelöschtes Mitglied 68249

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

Gelöschtes Mitglied 68249

Gast
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

Aktives 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

Aktives 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

Aktives 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... ?
 
G

Gelöschtes Mitglied 68249

Gast
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

Aktives 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)
 
G

Gelöschtes Mitglied 68249

Gast
Ist doch in Central verfügbar
Jupp, aber das Central ist bei uns nicht verfügbar -> eigener Nexus-Server, d.h. ich bin auf das angewiesen, was in der Firma freigegeben ist.

  1. Hab ich jetzt so geschrieben, das mit dem
    Code:
    <maven.compiler.release>
    hatte ich irgendwie vergessen.
  2. Das JUnit steht da drin, weil es beim automatischen erstellen der POM mit aufgenommen worden ist und ich in Zukunft gerne wieder JUnit im Projekt nutzen würde.
  3. Also configuration hab ich jetzt alles hoch gezogen in die root-pom und execution bleibt in den einzelnen POMs
  4. Ja, der Name des War-File wäre eigentlich egal, weil ich ja in der application.xml angebe, welches war-file auf welchen rootcontext gemappt wird und das passt Maven ja automatisch beim builden an
  5. Jaaaaa, weiß ich eigentlich, aber da ich aktuell die dependencies nur in einem Modul brauche, fand ich die root-pom so viel hübscher und aufgeräumter, aber kann ich noch umbauen.
Aber um mal zu den dependencies zu kommen. Ich kann mir die ja analysieren lassen und dann kommen solche Sachen raus:
- cfx-core:4.0.1
- angus-activation:2.0.1
- cfx-rt-frontend-simple:4.0.1
- angus-mail:1.0.0
- angus activation:1.0.0

Also ich habe indirekt zwei mal die dependency zu angus-activation, aber in zwei verschiedenen Versionen.
Wenn angus-mail irgend etwas direkt mit mailing zu tun hat, dann brauche ich das Paket sowieso nicht, weil das mache ich direkt über jakarta.mail-api.
Kann ich dann z.B. für das angus-mail eine direkt exclusion eintragen und dann ist das behoben?
 
G

Gelöschtes Mitglied 68249

Gast
Aber um mal zu den dependencies zu kommen. Ich kann mir die ja analysieren lassen und dann kommen solche Sachen raus:
  • cfx-core:4.0.1
  • angus-activation:2.0.1
  • cfx-rt-frontend-simple:4.0.1
  • angus-mail:1.0.0
  • angus activation:1.0.0
Toll, zu spät gesehen, und jetzt kann ich es nicht mehr bearbeiten.
Also was ich eigentlich zeigen wollte:
Code:
cfx-core:4.0.1
    enhält als Dependency
    angus-activation:2.0.1
cfx-rt-frontend-simple:4.0.1
    enhält als Dependency
    angus-mail:1.0.0
        das wiederum enthält
        angus activation:1.0.0
was dann zu einem Konflikt führt.

Habe das jetzt mal mit exclusions alles schön gemacht und teilweise Dependencies verwendet, die besser zusammen passen.
Wegen dependency-check-maven muss ich mal mit der Fachabteilung reden, das muss ich wohl beantragen, damit das nach Hause telefonieren darf.
Soll aber demnächst sowieso eine andere Lösung in der Firma dafür kommen.
 

khmarbaise

Aktives Mitglied
Jupp, aber das Central ist bei uns nicht verfügbar -> eigener Nexus-Server, d.h. ich bin auf das angewiesen, was in der Firma freigegeben ist.
Sorry nicht falsch verstehen, aber das ist unsinn.. ein eigener Nexus-Server ist ja sehr gut.. aber dann Sachen, die in der Entwicklung benötigt werden nicht da rein zu lassen.. ist einfach Blödsinn... Ich würde dann u.U. die Notwendigen Artefakte manuell in den Nexus hoch laden (separates internes Repo) ..,damit man in den Projekten mit Standard arbeiten kann... (eigentlich Unsinn!)...
  1. Das JUnit steht da drin, weil es beim automatischen erstellen der POM mit aufgenommen worden ist und ich in Zukunft gerne wieder JUnit im Projekt nutzen würde.
Ja wenn, dann aber am Besten per BOM... da nutzt man ja nicht nur die API sondern auch Parameterized Tests etc..
  1. Jaaaaa, weiß ich eigentlich, aber da ich aktuell die dependencies nur in einem Modul brauche, fand ich die root-pom so viel hübscher und aufgeräumter, aber kann ich noch umbauen.
Mein Vorschlag ist hier eben... per DependencyManagement alle Abhängigkeiten im Root definieren... (Zentraler Punkt für Pflege usw.) und auch der Punkt wo u.U. explizite Überschreibungen für Abhängigkeiten hinpakt (wenn die Notwendig sind!)

Aber um mal zu den dependencies zu kommen. Ich kann mir die ja analysieren lassen und dann kommen solche Sachen raus:
  • cfx-core:4.0.1
  • angus-activation:2.0.1
  • cfx-rt-frontend-simple:4.0.1
  • angus-mail:1.0.0
  • angus activation:1.0.0
Bei den cxf Sachen würde ich auch vorschlagen eine BOM zu nutzen: (https://repo1.maven.org/maven2/org/apache/cxf/cxf-bom/4.0.1/cxf-bom-4.0.1.pom) https://maven.apache.org/guides/int...ncy-mechanism.html#bill-of-materials-bom-poms
Dann definierst Du nur einen Eintrag im DependencyManagement und dann gibst Du nur noch groupId/artifactId (keine Version mehr) in den Modulen... (u.U. noch einen scope, wenn es z.B. eine Test Abhängigkeiten werden soll).
 
G

Gelöschtes Mitglied 68249

Gast
Also die Dependencies hab ich ins DependencyManagement gepackt und trotz der Excludes funktioniert noch alles. Von dem CXF-Geraffel kann ich scheinbar einiges rauswerfen, aber das mit den BOMs muss ich mir mal richtig durchlesen.

Als nächstes wollte ich den kompletten Persistence-Layer in ein eigenes Modul packen. Also alle Entity-Klassen und sämtliche Klassen, die sich ums Lesen und Schreiben in selbige kümmern. Das ist irgendwie so unstrukturiert und "lieblos" im Projekt verteilt, das ließe sich in einem eigenen Modul sauber organisieren und würde mir die Menge der Klassen in meiner Anwendung reduzieren. Das Testing würde mir in einem eigenen Modul auch besser gefallen.
Grundsätzlich wäre das packaging dann doch jar? Es gäbe keinen web- und application-Anteil? Und in meiner Hauptanwendung muss ich es als Dependency mit aufführen?
 

khmarbaise

Aktives Mitglied
Hi,
ja grundsäztlich ist das packaging JAR... (wenn nicht anders angegeben)... Ja es gäbe kein Web- und Application Anteil... und ja Du musst es als dependency aufführen....
 
G

Gelöschtes Mitglied 68249

Gast
Cool, scheint auch zu funktionieren, bin jetzt mit einzelnen Klassen umgezogen und hab auch schon ein paar Design-Fehler gefunden. In den Klassen, die das Datenhandling bereitstellen (wie nennt man die eigentlich ordentlich? Ich nenn die immer Factory), waren teilweise Business-Logik-Elemente, weil es sich damals angeboten hatte aus einer Funktion eine Eierlegende-Woll-Milch-Sau zu machen.

Aber zwei "Probleme" habe ich noch:
1. Um das Projekt lokal zu testen habe ich im Serverstart bei "Before launch": Run Maven Goal 'backend: clean package', dabei wird aber das andere Modul nicht automatisch mit gebuildet, außerdem scheint es so, dass ich das persistence-Modul immer mindestens mit 'install' builden muss, weil sich das Projekt die Version aus dem lokalen Repository zieht. Kann man das irgendwie automatisieren? Also in der Dependency sagen, dass er das immer builden muss? Oder missachte ich da Maven-Prinzipien?
2. Beim Build von meinem Backend kommt folgende Warnung: The POM for intern.atc:persistence:jar:3.7.0-SNAPSHOT is invalid, transitive dependencies (if any) will not be available, enable debug logging for more details
Was bedeutet diese transitive Abhängigkeit? Wie mach ich das besser?
 

mihe7

Top Contributor
In den Klassen, die das Datenhandling bereitstellen (wie nennt man die eigentlich ordentlich? Ich nenn die immer Factory)
Factory ist ein Design-Pattern, das dazu dient, Objekte zu erzeugen. Ich weiß nicht, was Du unter Datenhandling verstehst, aber da dort anscheinend keine Business-Logik enthalten sein soll, könnte es sich eventuell um "Value Objects" (Wertobjekte) oder Entities handeln?

ad 1: Probier mal für das Reactor-POM (dort, wo die modules definiert sind, nicht für das backend) clean package -pl backend -am. Das -am sorgt dafür, dass die von backend abhängigen Module des Reactors ebenfalls gebuildet werden.

ad 2: Das hört sich an, als ob das POM in Deinem persistence-Modul ungültig ist oder sich ein ungültiges POM in Deinem lokalen Maven-Repo für intern.atc:persistence:jar:3.7.0-SNAPSHOT befindet.

Die Meldung heißt einfach, dass aufgrund des ungültigen POMs etwaige Abhängigkeiten des persistence-Moduls dem Build nicht zur Verfügung stehen.
 
G

Gelöschtes Mitglied 68249

Gast
Factory ist ein Design-Pattern, das dazu dient, Objekte zu erzeugen.
Das ist es ja schon irgendwie. Also es gibt die Entität und dazu dann das Factory, welches alle Methoden hat, um ein bestimmtes Objekt der Entität zu laden, oder mehrere, oder diese zu speichern, oder ein "leeres" (default) Objekt erzeugt. Mehr soll in den Klassen nicht passieren, also keine Businesslogik, sondern nur das reine Handling mit den Objekten. Handler fällt ja auch aus, weil das sind ja die, die mit der Oberfläche kommunizieren.

ad1: hab ich gemacht, das ist ja spannend scheint genau das gemacht zu haben, in einem rutsch, zumindest passen die Zeitstempel im WAR-File. Danke

ad2: beim build aus ad1 gab es jetzt die Warnung nicht. Die Pom ist total klein und unauffällig:
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">
    <parent>
        <groupId>intern.atc</groupId>
        <artifactId>atc</artifactId>
        <version>3.7.0-SNAPSHOT</version>
    </parent>

    <modelVersion>4.0.0</modelVersion>
    <artifactId>persistence</artifactId>
    <packaging>jar</packaging>
    <version>3.7.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>jakarta.platform</groupId>
            <artifactId>jakarta.jakartaee-api</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.json</groupId>
            <artifactId>json</artifactId>
        </dependency>
        <dependency>
            <groupId>org.primefaces</groupId>
            <artifactId>primefaces</artifactId>
            <classifier>jakarta</classifier>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
        </dependency>
    </dependencies>
</project>
Fehler werden mir von IntelliJ keine angezeigt und wenn ich "Analyze Dependencies" mache, kommt auch kein Fehler dabei raus.
 

mihe7

Top Contributor
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Maven maven-assembly-plugin erstellt einen zusätzlichen Ordner Tools - Maven, Gradle, Ant & mehr 2
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
LimDul Maven-Abhängigkeiten im Build prüfen? Tools - Maven, Gradle, Ant & mehr 9
G Maven deployment über WebDAV Tools - Maven, Gradle, Ant & mehr 3
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
G 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

Ähnliche Java Themen

Neue Themen


Oben