Maven Dependencies in runnable Jar einbinden

Hein_nieH

Bekanntes Mitglied
Hallo Freunde der Bits und Bytes

ich bin dabei ein Programm zu schreiben, in dem ich externe Bibliotheken, wie z.B. JFreeChart benutze.
Wenn ich in Eclipse das Project als Java-Application ausführe funktioniert alles bestens,
d.h. die mit der externen Bibliothek erzeugte Charts werden angezeigt.

Wenn ich das Projekt über Maven baue, werden die Charts nicht angezeigt.
Ich habe die Routine zum Erzeugen der charts in eine try-catch-Konstrukt gepackt.
Es wird keine Exception geworfen.

Die via maven erzeugte jar habe ich untersucht (umwandeln in zip und dann entpacken).
Die Bibliothek JFreeChart ist nicht eingebunden.

Nach etwas googeln habe ich meine pom.xml geprüft und bin darauf gestoßen, dass ich das
maven-assembly-plugin mit einbinden muss.
Hat aber auch nichts gebracht.

Nun fehlen mir die Ideen, was ich noch machen kann, damit externe Bibliotheken in die erzeugt jar-Datei
eingebunden werden.

Wer kann mir weiter helfen??????
Über einenTip würde ich mich sehr freuen

Gruss Hein_nieH

Hier meine pom.xml
XML:
<project xmlns="[URL]http://maven.apache.org/POM/4.0.0[/URL]" xmlns:xsi="[URL]http://www.w3.org/2001/XMLSchema-instance[/URL]" xsi:schemaLocation="[URL]http://maven.apache.org/POM/4.0.0[/URL] [URL]http://maven.apache.org/xsd/maven-4.0.0.xsd[/URL]">
  <modelVersion>4.0.0</modelVersion>
  <groupId>DVD_Archiv</groupId>
  <artifactId>DVD_Archiv</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <name>DVD Archiv Marven</name>
  <description>Viewer fuer DVD-Sammlung mit eigener Statistik</description>
 
      <properties>
        <java.version>8</java.version>
            <project.build.sourceEncoding>Cp1252</project.build.sourceEncoding>
          <project.reporting.outputEncoding>Cp1252</project.reporting.outputEncoding>
     
          <src>src</src>
          <target>target</target>
          <doc>doc</doc>
         
          <!-- Quellverzeichnis der Elemente -->
          <src.main>${src}/main</src.main>
          <src.test>${src}/test</src.test>
         
          <!-- Verzeichnis für generierte Elemente -->
          <target.main>${target}/main</target.main>
          <target.test>${target}/test</target.test>
      </properties>

    <!-- Anpassung des Standard-Build-Prozesses -->
    <build>
        <!-- Standardverzeichnisse -->
        <!-- Source -->
        <!--
        <sourceDirectory>${src.main}</sourceDirectory>
        <testSourceDirectory>${src.test}</testSourceDirectory>
        -->
        <!-- Basisverezichnis für generierte Dateien -->
        
        <directory>${target}</directory>
       
        <!-- Output -->
        <!--
        <outputDirectory>${target.main}</outputDirectory>
        <testOutputDirectory>${target.test}</testOutputDirectory>
        -->
        <resources>
              <resource>
                <directory>src/main/resources</directory>
                <includes></includes>
                <excludes>
                      <exclude>**/*.java</exclude>
                </excludes>
              </resource>
        </resources>
       
        <!-- Anpassung des Build prozesses -->
        <plugins>
            <!-- Konfiguration des surefire-Plugins anpassen -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>3.0.0-M1</version>
                <configuration>
                    <testFailureIgnore>true</testFailureIgnore>
                    <formats>
                        <format>xml</format>
                        <format>html</format>
                    </formats>
                </configuration>
            </plugin>

            <!-- Konfiguration des maven-compiler-Plugins anpassen -->
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.0</version>
                <configuration>
                    <source>${java.version}</source>
                    <target>${java.version}</target>
                    <release>${java.version}</release>
                    <compilerArgument>-Xlint:all</compilerArgument>
                    <showWarnings>true</showWarnings>
                    <showDeprecation>true</showDeprecation>
                    <debug>true</debug>
                    <debuglevel>lines,vars,source</debuglevel>
                    <parameters>true</parameters>
                </configuration>
            </plugin>
           
            <!-- Konfiguration des maven-assembly-Plugins anpassen -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>3.1.0</version>
                <configuration>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <mainClass>gui.MainClass</mainClass>
                        </manifest>
                    </archive>
                   
                    <descriptorsRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorsRefs>
                   
                    <exceutions>
                        <exceution>
                            <phase>package</phase>
                            <goals>
                                <goal>single</goal>
                            </goals>
                        </exceution>
                    </exceutions>
                </configuration>
            </plugin>

            <!-- Konfiguration des maven-jar-Plugins anpassen -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>3.2.0</version>
                <configuration>
                    <!-- Verändert / Erweitert das default-Manifest -->
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <mainClass>gui.MainClass</mainClass>
                        </manifest>
                    </archive>
                    <!-- Name der jar-Datei aendern -->
                    <finalName>DVD_Viewer__Maven</finalName>
                    <!--  Ausgabeort für jar-Datei aendern -->
                    <outputDirectory>C:\Users\${user.name}1\Documents\Programmierung_Java\EXPORT</outputDirectory>
                </configuration>
            </plugin>
           


            <!-- Konfiguration des jacoco-plugins anpassen -->
            <plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
                <version>0.8.5</version>
                <configuration>
                    <append>false</append>
                </configuration>
                <executions>
                    <execution>
                        <id>pre-unit-test</id>
                        <goals>
                            <goal>prepare-agent</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>post-unit-test</id>
                        <phase>test</phase>
                        <goals>
                            <goal>report</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
           
            <!-- 
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-checkstyle-plugin</artifactId>
                <version>3.1.1</version>
                <configuration>
                    <configLocation>google_checks.xml</configLocation>
                    <encoding>Cp1252</encoding>
                    <consoleOutput>true</consoleOutput>
                    <failsOnError>true</failsOnError>
                    <linkXRef>false</linkXRef>
                </configuration>
                <executions>
                    <execution>
                        <id>validate</id>
                        <phase>package</phase>
                        <goals>
                            <goal>check</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            -->

        </plugins>
    </build>


    <!-- Einbindung externer Bibliotheken -->
    <dependencies>
        <!-- junit jupiter statt junit 4, wie oben: wir haben 2020, nicht 2010... -->
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>5.7.0</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.vintage</groupId>
            <artifactId>junit-vintage-engine</artifactId>
            <version>5.7.0</version>
            <scope>test</scope>
        </dependency>
        <!-- junit 4.12.0 nutzen, selbe version wie eclipse -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <!-- jfree jfreechart -->
        <dependency>
            <groupId>org.jfree</groupId>
            <artifactId>jfreechart</artifactId>
            <version>1.0.19</version>
        </dependency>
        <!-- jfree jcommon -->
        <dependency>
            <groupId>org.jfree</groupId>
            <artifactId>jcommon</artifactId>
            <version>1.0.23</version>
        </dependency>
    </dependencies>
</project>

*************************************************************************************************************************

hier die Ausgabe:
Code:
[INFO] Scanning for projects...
[INFO]
[INFO] -----------------------< DVD_Archiv:DVD_Archiv >------------------------
[INFO] Building DVD Archiv Marven 0.0.1-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- jacoco-maven-plugin:0.8.5:prepare-agent (pre-unit-test) @ DVD_Archiv ---
[INFO] argLine set to -javaagent:C:\\Users\\Hein_nieH1\\.m2\\repository\\org\\jacoco\\org.jacoco.agent\\0.8.5\\org.jacoco.agent-0.8.5-runtime.jar=destfile=C:\\Users\\Hein_nieH1\\Documents\\GitRepository_DVD_Archiv\\DVD_Archiv\\target\\jacoco.exec,append=false
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ DVD_Archiv ---
[INFO] Using 'Cp1252' encoding to copy filtered resources.
[INFO] Copying 55 resources
[INFO]
[INFO] --- maven-compiler-plugin:3.8.0:compile (default-compile) @ DVD_Archiv ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 56 source files to C:\Users\Hein_nieH1\Documents\GitRepository_DVD_Archiv\DVD_Archiv\target\classes
[WARNING] /C:/Users/Hein_nieH1/Documents/GitRepository_DVD_Archiv/DVD_Archiv/src/main/java/tablemodelxml/MyTableModelList.java:[22,17] found raw type: java.util.Vector
  missing type arguments for generic class java.util.Vector<E>
[WARNING] /C:/Users/Hein_nieH1/Documents/GitRepository_DVD_Archiv/DVD_Archiv/src/main/java/tablemodelxml/MyTableModelList.java:[22,40] found raw type: java.util.Vector
  missing type arguments for generic class java.util.Vector<E>
[WARNING] /C:/Users/Hein_nieH1/Documents/GitRepository_DVD_Archiv/DVD_Archiv/src/main/java/tablemodelxml/MyTableModelList.java:[99,16] found raw type: java.lang.Class
  missing type arguments for generic class java.lang.Class<T>
[WARNING] /C:/Users/Hein_nieH1/Documents/GitRepository_DVD_Archiv/DVD_Archiv/src/main/java/tablemodelxml/MyTableModelList.java:[215,30] unchecked call to add(E) as a member of the raw type java.util.Vector
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ DVD_Archiv ---
[INFO] Using 'Cp1252' encoding to copy filtered resources.
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.8.0:testCompile (default-testCompile) @ DVD_Archiv ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-surefire-plugin:3.0.0-M1:test (default-test) @ DVD_Archiv ---
[INFO]
[INFO] -------------------------------------------------------
[INFO]  T E S T S
[INFO] -------------------------------------------------------
[INFO] Running DummyTest
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.02 s - in DummyTest
[INFO]
[INFO] Results:
[INFO]
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO]
[INFO]
[INFO] --- jacoco-maven-plugin:0.8.5:report (post-unit-test) @ DVD_Archiv ---
[INFO] Loading execution data file C:\Users\Hein_nieH1\Documents\GitRepository_DVD_Archiv\DVD_Archiv\target\jacoco.exec
[INFO] Analyzed bundle 'DVD Archiv Marven' with 58 classes
[INFO]
[INFO] --- maven-jar-plugin:3.2.0:jar (default-jar) @ DVD_Archiv ---
[INFO] Building jar: C:\Users\Hein_nieH1\Documents\Programmierung_Java\EXPORT\DVD_Viewer__Maven.jar
[INFO]
[INFO] --- maven-install-plugin:2.4:install (default-install) @ DVD_Archiv ---
[INFO] Installing C:\Users\Hein_nieH1\Documents\Programmierung_Java\EXPORT\DVD_Viewer__Maven.jar to C:\Users\Hein_nieH1\.m2\repository\DVD_Archiv\DVD_Archiv\0.0.1-SNAPSHOT\DVD_Archiv-0.0.1-SNAPSHOT.jar
[INFO] Installing C:\Users\Hein_nieH1\Documents\GitRepository_DVD_Archiv\DVD_Archiv\pom.xml to C:\Users\Hein_nieH1\.m2\repository\DVD_Archiv\DVD_Archiv\0.0.1-SNAPSHOT\DVD_Archiv-0.0.1-SNAPSHOT.pom
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 26.891 s
[INFO] Finished at: 2021-02-11T14:58:53+01:00
[INFO] ------------------------------------------------------------------------
 
Zuletzt bearbeitet von einem Moderator:
<project.build.sourceEncoding>Cp1252</project.build.sourceEncoding>
<project.reporting.outputEncoding>Cp1252</project.reporting.outputEncoding>
Java Projekte sollten UTF-8 sein

<src>src</src>
<target>target</target>
<doc>doc</doc>
Es gibt keinen sinnvollen Grund das zu konfigurieren
<!-- Quellverzeichnis der Elemente -->
<src.main>${src}/main</src.main>
<src.test>${src}/test</src.test>
Es gibt keinen sinnvollen Grund das zu konfigurieren
<!-- Verzeichnis für generierte Elemente -->
<target.main>${target}/main</target.main>
<target.test>${target}/test</target.test>
Es gibt keinen sinnvollen Grund das zu konfigurieren
</properties>

<!-- Anpassung des Standard-Build-Prozesses -->
<build>
<!-- Standardverzeichnisse -->
<!-- Source -->
<!--
<sourceDirectory>${src.main}</sourceDirectory>
<testSourceDirectory>${src.test}</testSourceDirectory>
-->
Es gibt keinen sinnvollen Grund das zu konfigurieren (gut ist es eh auskommentiert)
<!-- Basisverezichnis für generierte Dateien -->

<directory>${target}</directory>
Es gibt keinen sinnvollen Grund das zu konfigurieren
<!-- Output -->
<!--
<outputDirectory>${target.main}</outputDirectory>
<testOutputDirectory>${target.test}</testOutputDirectory>
Es gibt keinen sinnvollen Grund das zu konfigurieren
-->
<resources>
<resource>
<directory>src/main/resources</directory>
<includes></includes>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</resource>
</resources>
Es gibt keinen sinnvollen Grund das in der Form zu konfigurieren
 
Zuletzt bearbeitet:
Bei einer nicht völlig misshandelten Pom und ohne das Ignorieren jeder Anmerkung dazu wäre die Motivation, etwas zu dem jetzigen Problem zu sagen, sicherlich größer 🙂
 
Meine Vermutung wäre, dass du immer noch einen absoluten Pfad in der POM hast, ist das Problem.

Aber generell - meine Motivation sich damit zu beschäftigen ist quasi null. Denn du hast offensichtlich kein Interesse es zu verstehen, sondern deine POM sagt "Mir ist es scheiß egal, wie man es richtig, es muss nur irgendwie funktionieren, aber ich will nicht lernen, wie man es korrekt macht". Dementsprechend ist meine Motivation jemanden zu helfen gering, der nicht lernfähig ist und sich lieber in der POM an X Stellen versucht in den Fuss zu schießen.

Und ja - jede dieser Dinge *kann* dazu beitragen. Der erste Schritt bei einer Fehleranalyse ist für mich, die Dinge die einfach zu beheben sind auszuschließen, dass es die Ursache ist.

Damit ist das mein letzter Beitrag, wenn ich weiter unterstützen soll, dann mit einem minimalen Beispiel wo man das Problem nachstellen kann (Projekt zum runterladen) mit einer sauberen POM.
 
Moinsen,
Ich habe jetzt in der POM aufgeräumt und die Hinweise von LimDul umgesetzt.
Die externen Bibliotheken werden aber immer noch nicht in das jar-File eingebunden.
Wo könnte man noch schauen???

Gruß Hein_nieH
 
Dir ist aber bewusst, dass die nicht das Jar File eingebunden werden, sondern ein weiteres Jar-File daneben im Target Ordner erstellt wird?
 
So ich bin einen Schritt weiter
execution war falsch geschrieben.
Trotz der Korrektur funktioniert es nicht.
Vom Maven-Assembly-Plugin wird auch keine Meldung ausgegeben.

@LimDul : ich war tatsächlich der Annahme, das alles in einer jar-Datei zusammengefasst wird.

Gruß Hein_nieH
 
Ich sehe es - das executions tag muss neben das configuration tag - nicht daran.

Probier mvn validate, ob der das erkennt.
 
Das war ein guter Tip.
Jetzt kommt auch ein Echo vom assembly-plugin: Mo Assembly descriptors found

Für heute mache ich Schluss.
Danke für die Hilfe

Gruß Hein_nieH
 

Zurück
Oben