Projekte in IDE untereinander sharen / Probleme beim Build

internet

Top Contributor
Hallo,

ich versuche mich gerade daran, dass ich Projekte untereinander share.

D.h. ich habe bspw. 5 Eclipse Projekte.
In allen Projekten hatte ich vor kurzem immer jeweils einige gleiche Klassen verwendet.
Diese habe ich nun alle ausgelagert in ein Projekt.
Dieses Projekt habe ich nun zum Testen bei einem der bisherigen Projekte hinzugefügt:

1669820763318.png

Das funktioniert auch soweit, und ich kann die Klassen in meinem bisherigen Projekt verwendet.
Nun habe ich aber Probleme beim Build (.war - file) des Projekts.

Hier bekomme ich nun eine java.lang.NoClassDefFoundError Exception beim Bauen (Maven) des Webprojekts (.war - File).
Habe ich etwas vergessen?
 
Wenn Du mit Maven arbeitest, dann musst Du all diese Dinge auch in Maven verwalten! Also vergiss die ganzen Eclipse Einstellungen!
 
hm, das heißt dann genau?
In meiner pom.xml füge ich ja die ganzen Dependency so hinzu:
Java:
<dependency>
    <groupId>org.webjars</groupId>
    <artifactId>font-awesome</artifactId>
    <version>4.7.0</version>
</dependency>

aber wie mache ich das dann mit einem lokalen Eclipse Projekt?
 
Eclipse übernimmt den den Classpath von Maven automatisch, wenn das Projekt die "Maven Nature" hat. Wenn dein Sub-Projekt auch ein Maven-Projekt ist, dann musst du es in die pom.xml eintragen.
 
hm...
ja, das ist auch ein Maven Projekt...

Das habe ich nun gebaut (.jar) und ich sehe, dass es in meinem Maven Pfad auch ist... "myUser/ .m2

Nun habe ich es in meiner .pom.xml hinzugefügt:
Java:
<dependency>
  <groupId>com.mycompany</groupId>
  <artifactId>test</artifactId>
  <version>1.0-SNAPSHOT</version>
</dependency>

Die Klassen werden im Compiler auch geladen. Aber beim Bauen des .war files erhalte ich weiterhin die Fehlermeldung:
java.lang.NoClassDefFoundError

Im Maven Tree von diesem Projekt, sehe ich nun aber nicht die .jar - Datei, sondern das Subprojekt... Stimmt das so?
1669824111320.png

Was mache ich falsch?
 
Zuletzt bearbeitet:
Als erstes noch einmal: Mach rückgängig, was Du in Eclipse eingestellt hast ... Maven Projekte werden rein mit Maven gebaut!

Wenn Du Maven nutzt, dann zeig die pom.xml von Deinen Projekten! Das sind die eigentlichen Einstellungen. Maven bietet den Vorteil, dass man ganz einfach die ganze Konfiguration eines Projektes zeigen kann - nutze diese Möglichkeit!

Und lass die Screenshots von Eclipse! Statt dessen zeig die Ausgabe, die ein "mvn clean package" zeigt. Ggf. von beiden Projekten. Das ist Vorteil Nr. 2: Man bekommt wirklich die Fehlermeldung und keine Interpretationen!
 
Danke.
1) Habe ich bereits rückgängig gemacht

Hier die pom.xml von dem Share Projekt:
Java:
<?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/maven-v4_0_0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <groupId>com.mycompany</groupId>
    <artifactId>test</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>
    <name>Test classes</name>
    <description>Common classes</description>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
        <failOnMissingWebXml>false</failOnMissingWebXml>
        <resteasy.version>4.5.8.Final</resteasy.version>
        <wildfly-arquillian.version>3.0.1.Final</wildfly-arquillian.version>
        <maven-dependency-plugin.version>3.1.2</maven-dependency-plugin.version>
        <maven-failsafe-plugin.version>3.0.0-M5</maven-failsafe-plugin.version>
        <wildfly.version>21.0.0.Final</wildfly.version>
    </properties>



    <repositories>

        <repository>
            <id>central</id>
            <name>Maven Central</name>
            <url>https://repo1.maven.org/maven2</url>
        </repository>

    </repositories>


    <dependencies>

        <!--Etliche dependencies, lasse jetzt der Übersichtlichkeit diese weg...-->
        <dependency>
            <groupId>org.quartz-scheduler</groupId>
            <artifactId>quartz</artifactId>
            <version>2.3.2</version>
        </dependency>

    </dependencies>


    <build>
        <finalName>${project.artifactId}</finalName>
        <plugins>


            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <configuration>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                </configuration>
            </plugin>
        </plugins>
    </build>


</project>

Wenn ich mit Eclipse "Maven Install" mache, bekomme ich keine Fehler, hier die Ausgabe:

Code:
[INFO] Building MyCompany Common classes 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[WARNING] The artifact bouncycastle:bctsp-jdk14:jar:138 has been relocated to org.bouncycastle:bctsp-jdk14:jar:1.38
[WARNING] The POM for org.jboss.spec.javax.transaction:jboss-transaction-api_1.2_spec:jar:1.1.1.Final is invalid, transitive dependencies (if any) will not be available, enable debug logging for more details
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ test ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 1 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ test ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 87 source files to /Applications/Software/eclipse-workspace/test/target/classes
[WARNING] /Applications/Software/eclipse-workspace/test/src/main/java/com/mycompany/condition/model/Condition.java: Some input files use unchecked or unsafe operations.
[WARNING] /Applications/Software/eclipse-workspace/test/src/main/java/com/mycompany/condition/model/Condition.java: Recompile with -Xlint:unchecked for details.
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ test ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 1 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ test ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ test ---
[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ test ---
[INFO] Building jar: /Applications/Software/eclipse-workspace/test/target/test.jar
[INFO] META-INF/maven/com.mycompany/test/pom.xml already added, skipping
[INFO] META-INF/maven/com.mycompany/test/pom.properties already added, skipping
[INFO]
[INFO] --- maven-install-plugin:2.4:install (default-install) @ test ---
[INFO] Installing /Applications/Software/eclipse-workspace/test/target/test.jar to /Users/RIDER/.m2/repository/com/mycompany/test/1.0-SNAPSHOT/test-1.0-SNAPSHOT.jar
[INFO] Installing /Applications/Software/eclipse-workspace/test/pom.xml to /Users/RIDER/.m2/repository/com/mycompany/test/1.0-SNAPSHOT/test-1.0-SNAPSHOT.pom
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  19.727 s
[INFO] Finished at: 2022-11-30T17:18:41+01:00
[INFO] ------------------------------------------------------------------------

Hier die pom.xml von meinem Projekt, in dem ich das Subprojekt einbinden möchte:
Code:
<?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/maven-v4_0_0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <groupId>com.mycompany</groupId>
    <artifactId>primaryproject</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>
    <name>Ticketsystem</name>
    <description>Ticketsystem</description>

    <!-- <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <java.version>1.8</java.version> <maven.compiler.target>${java.version}</maven.compiler.target>
        <maven.compiler.source>${java.version}</maven.compiler.source> </properties> -->

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <project.build.directory>/Applications/Software</project.build.directory>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
        <failOnMissingWebXml>false</failOnMissingWebXml>
        <resteasy.version>4.5.8.Final</resteasy.version>
        <wildfly-arquillian.version>3.0.1.Final</wildfly-arquillian.version>
        <maven-dependency-plugin.version>3.1.2</maven-dependency-plugin.version>
        <maven-failsafe-plugin.version>3.0.0-M5</maven-failsafe-plugin.version>
        <wildfly.version>21.0.0.Final</wildfly.version>
        <m2e.apt.activation>jdt_apt</m2e.apt.activation>
        <org.mapstruct.version>1.4.2.Final</org.mapstruct.version>
    </properties>


    <repositories>

        <repository>
            <id>central</id>
            <name>Maven Central</name>
            <url>https://repo1.maven.org/maven2</url>
        </repository>

    </repositories>


    <dependencyManagement>
        <dependencies>

            <dependency>
                <groupId>org.jboss.arquillian</groupId>
                <artifactId>arquillian-bom</artifactId>
                <version>1.6.0.Final</version>
                <scope>import</scope>
                <type>pom</type>
            </dependency>

            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.12</version>
                <scope>test</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>


    <dependencies>

        <!-- einige andere dependencies... -->
        
        <dependency>
            <groupId>com.mycompany</groupId>
            <artifactId>test</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

    </dependencies>


    <build>
        <finalName>${project.artifactId}</finalName>
        <plugins>

            <plugin>
                <groupId>org.wildfly.plugins</groupId>
                <artifactId>wildfly-maven-plugin</artifactId>
                <version>1.0.1.Final</version>
            </plugin>

            <plugin>
                <artifactId>maven-war-plugin</artifactId>
                <version>3.2.2</version>
                <configuration>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <annotationProcessorPaths>
                        <path>
                            <groupId>org.mapstruct</groupId>
                            <artifactId>mapstruct-processor</artifactId>
                            <version>${org.mapstruct.version}</version>
                        </path>
                    </annotationProcessorPaths>
                    <webResources>
                        <resource>
                            <directory>${basedir}/src/main/webapp</directory>
                            <filtering>true</filtering>
                            <includes>
                                <include>*.css</include>
                                <include>*.html</include>
                            </includes>
                        </resource>
                    </webResources>
                </configuration>
            </plugin>


        </plugins>
    </build>

</project>

Auch hier bekomme ich beim Build mit Maven Install kein Fehler... sondern eben, BUILD SUCCESS und das .war File wird erstellt...
Wenn ich das .war File dann aber auf den Wildfly deploye, bekomme ich wie gesagt die Fehlermeldung:

Caused by: java.lang.NoClassDefFoundError: Failed to link class....
 
Welche Klasse findet er denn genau nicht? Und das jar mit Dependencies zu packen sieht falsch aus.

Also das hier:
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
Das macht man nur, wenn ein jar bauen will, das man eigenständig ausführen will. Nicht wenn man das woanders einbinden will. Die Dependencies werden ja über maven für das war-projekt selbst gezogen.
 

Zurück
Oben