# Maven und Datenbank(treiber)



## Turing0001 (8. Apr 2021)

Hallo ihr Java-Experten,

ich habe gerade versucht ein bereits bestehenes Eclipse-Projekt in ein Maven-Projekt umzuwandeln. Dieses benutzt eine einfache SQLITE Datenbank und eine simple Oberfläche um das Resultset eines select-Befehls sichtbar zu machen.  Nun wird nach dem Maven-Build aber der Treiber für den ich eine dependency verwende nicht gefunden. Im Build-Path wird er zwar in den Maven-Dependencies angezeigt, ich bekomme aber zur Laufzeit einen Fehler. Ich habe einen Ordner  'resources' in mein Projekt eingefügt in welchem die Datenbank liegt. Ohne Maven funktioniert das Ganze auch wunderbar. Ich hänge hier mal meine pom an sowie den Codeausschnitt in welchem ich den Treiber bzw. die Datenbank anspreche. Zunächst die pom:


```
<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>
  <groupId>de.martin.marcus</groupId>
  <artifactId>DatenbankMaven</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>
  <name>MavenDB</name>
  <description>Datenbank mit Maven</description>
  <properties>
    <maven.compiler.source>15</maven.compiler.source>
    <maven.compiler.target>15</maven.compiler.target>
</properties>
  <dependencies>
   <!-- https://mvnrepository.com/artifact/org.xerial/sqlite-jdbc -->
<dependency>
    <groupId>org.xerial</groupId>
    <artifactId>sqlite-jdbc</artifactId>
    <version>3.30.1</version>
</dependency>
  </dependencies>
  <build>
    <sourceDirectory>src</sourceDirectory>
    <plugins>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.8.1</version>
        <configuration>
          <release>15</release>
        </configuration>
      </plugin>
      <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>3.2.0</version>
                <configuration>
                    <archive>
                        <manifest>
                            <mainClass>de.martin.marcus.mydatabase</mainClass>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>
    </plugins>
  </build>
</project>
```

Und nun noch den Codeausschnitt:


```
try {
            DriverManager.setLogWriter(new PrintWriter(System.out));//Protokolliert DB-Zugriff
            Class.forName("org.sqlite.JDBC");
            System.out.println("Treiber geladen");   
            
        } catch(Exception e) {
            txtArea.append("Fehler bei JDBC-Bridge: " + e + " \n");
            return;
        }
        
        
        try {
            
            String url = "jdbc:sqlite::resource:"+sDB+".db";
    
            conn = DriverManager.getConnection(url,"","");
```

Ich bekomme eben nun meine Fehlermeldung "Fehler bei JDBC-Bridge"

Hat jemand einen Tip für mich, was ich da falsch mache? 
Beim Build erscheint auch eine Meldung:
 skip non existing resourceDirectory C:\Users\User\eclipseworkspace\eclipse-workspace\DatenbankMaven\src\main\resources

Müssen da evtl. zusätzliche Ordner angelegt werden?
Vielen Dank schon mal für eure Mühe!


----------



## Turing0001 (8. Apr 2021)

Ich habe hier auch noch einen Screenshot für euch:


----------



## thecain (8. Apr 2021)

Wieso verwendest du nicht die Standard maven struktur? src/main/java bzw src/main/resources? Dann wäre die markierte Info schonmal behoben


----------



## Turing0001 (8. Apr 2021)

thecain hat gesagt.:


> Wieso verwendest du nicht die Standard maven struktur? src/main/java bzw src/main/resources? Dann wäre die markierte Info schonmal behoben


Habe ich inzwischen schon gemacht, das Projekt wurde komplett neu als Maven Projekt angelegt. Das ändert aber nichts daran, dass der Treiber nicht gefunden wird.


----------



## mrBrown (8. Apr 2021)

Turing0001 hat gesagt.:


> Habe ich inzwischen schon gemacht, das Projekt wurde komplett neu als Maven Projekt angelegt. Das ändert aber nichts daran, dass der Treiber nicht gefunden wird.


"nicht gefunden", wenn du eine Jar baust und diese ausführst?


----------



## Turing0001 (8. Apr 2021)

mrBrown hat gesagt.:


> "nicht gefunden", wenn du eine Jar baust und diese ausführst?


Hallo mrBrown,

ja genau. Die Fehlermeldung ist :  Fehler bei JDBC-Bridge: java.lang.ClassNotFoundException: org.sqlite.JDBC


----------



## mrBrown (8. Apr 2021)

Das ist "normal", das Jar-Plugin packt keine Abhängigkeiten mit in die Jar.

@kneitzel hatte letztens Möglichkeiten gepostet, wie das geht, der kann da bestimmt gleich was zu sagen


----------



## Turing0001 (8. Apr 2021)

mrBrown hat gesagt.:


> Das ist "normal", das Jar-Plugin packt keine Abhängigkeiten mit in die Jar.
> 
> @kneitzel hatte letztens Möglichkeiten gepostet, wie das geht, der kann da bestimmt gleich was zu sagen


Ok, das mit den Abhängigkeiten wusste ich nicht, danke für die Info. Kneeeeiiiitzel!!!!!! 😊 (Was wäre da Java-Leben ohne ihn).


----------



## Turing0001 (8. Apr 2021)

Hier übrigens nochmal der aktuelle Screenshot mit dem neuen Maven-Projekt:


----------



## mrBrown (8. Apr 2021)

Bitte keine Screenshots, sondern Code immer als Code posten


----------



## Turing0001 (8. Apr 2021)

mrBrown hat gesagt.:


> Bitte keine Screenshots, sondern Code immer als Code posten


Ok, meine Absicht war es , die Ordnerstruktur des Projektes zu zeigen und wo sich welche Dateien befinden. Aber danke für den Hinweis!


----------



## kneitzel (8. Apr 2021)

Also viele Wege führen nach Rom, aber aus meiner Sicht ist für "fat jars" der Standard Weg das Maven Shade Plugin:


			Apache Maven Shade Plugin – Introduction
		


Einbauen einfach genau so, wie in der "Usage" Seite dort:


			Apache Maven Shade Plugin – Usage
		


==> Configuration dann nur einfügen, wenn man das wirklich benötigt.

Das Beispiel ist so auch ganz gut - da läuft das dann bei einem package Aufruf direkt mit.


----------



## Turing0001 (8. Apr 2021)

kneitzel hat gesagt.:


> Also viele Wege führen nach Rom, aber aus meiner Sicht ist für "fat jars" der Standard Weg das Maven Shade Plugin:
> 
> 
> Apache Maven Shade Plugin – Introduction
> ...


Kneitzel, Du bist echt spitze. Ich bin gerade im Online-Unterricht, werde das aber heute abend anschauen und ausprobieren. Mit dem Programmieren scheint es sich genauso zu verhalten wie mit einer Droge. Man kann lange Zeit abstinent sein (15 Jahre bei mir), aber wehe Du wirst auch nur einmal kurz rückfällig, dann bist Du sofort wieder total drauf.  Wenn mein Herz auch eigentlich der Mathematik gehört.


----------



## Turing0001 (9. Apr 2021)

Turing0001 hat gesagt.:


> Kneitzel, Du bist echt spitze. Ich bin gerade im Online-Unterricht, werde das aber heute abend anschauen und ausprobieren. Mit dem Programmieren scheint es sich genauso zu verhalten wie mit einer Droge. Man kann lange Zeit abstinent sein (15 Jahre bei mir), aber wehe Du wirst auch nur einmal kurz rückfällig, dann bist Du sofort wieder total drauf.  Wenn mein Herz auch eigentlich der Mathematik gehört.


Hallo Kneitzel,

habe das gestern abend noch ausprobiert und es funktioniert wunderbar. Danke Dir tausend Mal. Auf diese Art lerne ich sehr viel mehr und schneller als ich gedacht hatte. Am Wochenende werde ich mal versuchen wieder in Git/Github reinzukommen. Wäre toll, wenn ich wieder auf Deine Hilfe und all der anderen Experten im Forum zählen könnte.


----------

