[Gelöst] Java Hauptklasse nicht gefunden

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
ralli
Beiträge: 3919
Registriert: 02.03.2008 08:03:02

[Gelöst] Java Hauptklasse nicht gefunden

Beitrag von ralli » 30.11.2023 07:46:25

Kennt sich jemand mit Java aus?

Im Augenblick beschäftige ich mich mit Java speziell der Java DB Derby. Ich habe hier folgenden Beispiel Quellcode von zetcode.com:

Code: Alles auswählen

package com.zetcode;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Level;
import java.util.logging.Logger;

public class CreateCars {
...

Das compilieren funktioniert einwandfrei:

Code: Alles auswählen

javac CreateCars.java
Es wird zur Quellcodedatei eine CreateCars.class Datei erstellt.

Dazu habe ich eine Manifest.fm Datei mit folgendem Inhalt erstellt:

Code: Alles auswählen

Manifest-Version: 1.0
Created-By: “Ralph XXXXXl”
Main-Class: CreateCars
ClassPath: /home/ralph/Arbeit/Entwicklung/Java/Derby/cars
Dann habe ich eine Jar Datei mit Manifest.fm erstellt:

Code: Alles auswählen

jar cvfm CreateCars.jar Manifest.mf *.class
Auch das hat ohne Fehler funktioniert, die Manifest.fm wurde hinzugefügt, die jar Datei erstellt.

Wenn ich die Jardatei nun ausführen möchte:

Code: Alles auswählen

java -jar CreateCars.jar
erfolgt eine Fehlermeldung:

Code: Alles auswählen

Fehler: Hauptklasse CreateCars konnte nicht gefunden oder geladen werden
Alle Dateien befinden sich im selben Verzeichnis /home/ralph/Arbeit/Entwicklung/Java/Derby/cars .

Die Derby Datenbank Treiber liegen im PATH.

Was läuft hier falsch?

Gruß ralli
Zuletzt geändert von ralli am 30.11.2023 16:17:26, insgesamt 1-mal geändert.
Wer nicht lieben kann, muß hassen. Wer nicht aufbauen kann muß zerstören. Wer keine Brücken baut, muß spalten.

homer65
Beiträge: 100
Registriert: 01.04.2005 16:29:26

Re: Java Hauptklasse nicht gefunden

Beitrag von homer65 » 30.11.2023 09:06:18

Da wird wohl was mit dem Manifest nicht stimmen. Bitte frag mich nicht was, habe davon keine Ahnung. Ich würde das Programm anders starten:
java -cp ./dein.jar com.zetcode.CreateCars
Dabei ist ./dein.jar der Pfad zu Deiner jar Datei.
Ups hatte das mit Derby übersehen. Der JDBC Treiber muss auch im CLASSPATH und nicht im PATH liegen. Die Option -cp gibt den CLASSPATH an.
Also wäre Folgendes Besser:
java -cp ./dein.jar:./derby.jar com.zetcode.CreateCars

Benutzeravatar
ralli
Beiträge: 3919
Registriert: 02.03.2008 08:03:02

Re: Java Hauptklasse nicht gefunden

Beitrag von ralli » 30.11.2023 09:26:00

Danke ich bekomm es nicht hin. Mit Netbeans oder mit ij als Konsolendienstprogramm funktioniert Derby einwandfrei. Möchte zuerst mal nur eine Verbindung herstellen zu einer bestehenden Derby Datenbank probedb mit einer Tabelle adressen mit purem Java.

Gruß ralli
Wer nicht lieben kann, muß hassen. Wer nicht aufbauen kann muß zerstören. Wer keine Brücken baut, muß spalten.

homer65
Beiträge: 100
Registriert: 01.04.2005 16:29:26

Re: Java Hauptklasse nicht gefunden

Beitrag von homer65 » 30.11.2023 09:38:35

Was kommen denn für Fehlermeldungen? Wo liegt Dein JDBC Treiber und wie heißt er? Wo liegt Deine jar-Datei und wie heißt sie?

Benutzeravatar
ralli
Beiträge: 3919
Registriert: 02.03.2008 08:03:02

Re: Java Hauptklasse nicht gefunden

Beitrag von ralli » 30.11.2023 10:15:14

homer65 hat geschrieben: ↑ zum Beitrag ↑
30.11.2023 09:38:35
Was kommen denn für Fehlermeldungen? Wo liegt Dein JDBC Treiber und wie heißt er? Wo liegt Deine jar-Datei und wie heißt sie?
Hab zuerst mal einen neuen Ansatz, Java Quellcode demodb.java.

Code: Alles auswählen


import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;

public class demodb {

    public static void main(final String[] args) throws SQLException {

        // connect
        final Connection connection = DriverManager.getConnection("jdbc:derby:probedb;user=ralph;create=false");
        
        // shutdown
        try {
            DriverManager.getConnection("jdbc:derby:;shutdown=true");
        } catch (final SQLException e) {
            if ((e.getErrorCode() == 50000) && "XJ015".equals(e.getSQLState())) {
                System.out.println("Database shutdown normally");
            } else {
                e.printStackTrace();
            }
        }

    }

}
Die Quellcodedatei demodb.java liegt im Ordner /home/ralph/Arbeit/Entwicklung/Java/Derby.

Die Standalone Datenbank probedb mit der Tabelle adressen habe ich gestern mit dem Dienstprogramm ij erstellt. Sie liegt im Ordner /home/ralph/Arbeit/Entwicklung/Java/Derby/db. Mit ij oder Netbeans kann ich eine erfolgreiche Verbindung herstellen.

Mein JDBC Treiber liegt hier:

/home/ralph/jdk1.8.0_111/db/lib

Hier liegen alle Derby Treiber und Dienstprogramme. Ich benutze Derby.jar.

Zugriff habe ich durch folgende Einträge in der .bashrc im Homeverzeichnis:

Code: Alles auswählen

export PATH=$PATH:/home/ralph/jdk1.8.0_111/bin

export PATH=$PATH:/home/ralph/jdk1.8.0_111/db/bin
Jetzt compiliere ich den Quellcode mit

Code: Alles auswählen

javac demodb.java
Die Compilierung erfolgt fehlerfrei.

Jetzt starte ich mit

Code: Alles auswählen

java demodb
es kommt folgende Fehlermeldung:

Code: Alles auswählen

Exception in thread "main" java.sql.SQLException: No suitable driver found for jdbc:derby:probedb;user=ralph;create=false
	at java.sql.DriverManager.getConnection(DriverManager.java:689)
	at java.sql.DriverManager.getConnection(DriverManager.java:270)
	at demodb.main(demodb.java:13)
Eine Manifest.mf habe ich noch nicht erstellt. Was gehört da hinein, wie sieht der Inhalt aus?

Wenn die fehlerfrei erstellt ist kann ich die jar Datei erstellen mit:

Code: Alles auswählen

jar cvfm demodb.jar Manifest.mf *.class
Danke für Dein Engagement. Wenn ich die Anfangshürde überwunden habe, schaff ich alles weitere selbst. Zuerst aber mal will ich eine funktionierende Verbindung zu meiner bestehenden Datenbank mit purem Java herstellen. Wenn das funktioniert, kann ich darauf aufbauen. Hab in einigen anderen Programmiersprachen erfolgreich Programme erstellt, Java ist für mich Neuland. Das Endziel ist, eine Java Swing GUI für diese Anwendung zu schreiben. Geht alles nicht mehr so schnell, bin 73 Jahre. Danke. Hab natürlich auch recherchiert, alle Beispiele funktionieren irgendwie nicht. Irgendwo ist wohl ein Denkfehler. Danke nochmals für Deine Mühe, ich hoffe, Du kannst mit meinen Angaben etwas anfangen, so das wir weiter kommen.

Liebe Grüße ralli
Wer nicht lieben kann, muß hassen. Wer nicht aufbauen kann muß zerstören. Wer keine Brücken baut, muß spalten.

homer65
Beiträge: 100
Registriert: 01.04.2005 16:29:26

Re: Java Hauptklasse nicht gefunden

Beitrag von homer65 » 30.11.2023 10:43:15

Sieht doch schon gut aus. Bist einen Schritt weiter. Jetzt muss nur noch der Derby JDBC Treiber in den CLASSPATH.
java -cp .:/home/ralph/jdk1.8.0_111/db/lib/Derby.jar demodb
Gruß Christian

Benutzeravatar
ralli
Beiträge: 3919
Registriert: 02.03.2008 08:03:02

Re: Java Hauptklasse nicht gefunden

Beitrag von ralli » 30.11.2023 11:00:34

homer65 hat geschrieben: ↑ zum Beitrag ↑
30.11.2023 10:43:15
Sieht doch schon gut aus. Bist einen Schritt weiter. Jetzt muss nur noch der Derby JDBC Treiber in den CLASSPATH.
java -cp .:/home/ralph/jdk1.8.0_111/db/lib/Derby.jar demodb
Gruß Christian
Hallo Christian, vorab danke für Deine Unterstützung. Melde mich später.

Gruß ralli
Wer nicht lieben kann, muß hassen. Wer nicht aufbauen kann muß zerstören. Wer keine Brücken baut, muß spalten.

Benutzeravatar
ralli
Beiträge: 3919
Registriert: 02.03.2008 08:03:02

Re: Java Hauptklasse nicht gefunden

Beitrag von ralli » 30.11.2023 11:13:06

Und später ist jetzt :mrgreen:

Im sourcecode habe ich noch eine Anpassung vorgenommen, sonst findet er die Datebank nicht:

Code: Alles auswählen

// connect
        final Connection connection = DriverManager.getConnection("jdbc:derby:/home/ralph/Arbeit/Entwicklung/Java/Derby/db/probedb;user=ralph;create=false");
        
Und beim Starten muß es heißen:

Code: Alles auswählen

java -cp .:/home/ralph/jdk1.8.0_111/db/lib/derby.jar demodb
weil linux ja zwischen Klein/Großschrift unterscheidet. Aber Juchuuu, jetzt funktioniert es. :hail: Ist es vermessen, wenn Du mir einmal postest, was in die Manifest.mf hineingehört? Dann habe ich eine Vorlage, die ich zukünftig nur anpassen muß. Und dann kann ich eine jar Datei damit erstellen. Du bist sehr nett und hilfsbereit, aber das sind ja viele hier im Forum.

Grüße ralli
Wer nicht lieben kann, muß hassen. Wer nicht aufbauen kann muß zerstören. Wer keine Brücken baut, muß spalten.

homer65
Beiträge: 100
Registriert: 01.04.2005 16:29:26

Re: Java Hauptklasse nicht gefunden

Beitrag von homer65 » 30.11.2023 11:24:39

Beim Manifest bin ich leider überfragt. Erzeuge jar Dateien immer mit Eclipse und da wird das Manifest mit generiert. Aber wenn Du mit der Option -cp java startest ist auch egal was im Manifest steht. Die Syntax ist dann:
java -cp name1.jar:name2.jar klassenname
Man kann auch mehr als zwei jar Dateien angeben, sie müssen nur durch : getrennt sein (bei Windows ist es ein ; ). Der Klassenname muss inklusive aller Packages sein. Also z.B.: com.zetcode.Test.

Benutzeravatar
TRex
Moderator
Beiträge: 8086
Registriert: 23.11.2006 12:23:54
Wohnort: KA

Re: Java Hauptklasse nicht gefunden

Beitrag von TRex » 30.11.2023 13:38:42

Kleiner Tipp zur Nachvollziehbarkeit bei Quellcode: den ganzen Code posten (nopaste) oder die Quelle verlinken -> https://zetcode.com/db/apachederbytutorial/jdbc/
Jesus saves. Buddha does incremental backups.
Windows ist doof, Linux funktioniert nichtDon't break debian!Wie man widerspricht

Benutzeravatar
ralli
Beiträge: 3919
Registriert: 02.03.2008 08:03:02

Re: Java Hauptklasse nicht gefunden

Beitrag von ralli » 30.11.2023 13:52:53

homer65 hat geschrieben: ↑ zum Beitrag ↑
30.11.2023 11:24:39
Beim Manifest bin ich leider überfragt. Erzeuge jar Dateien immer mit Eclipse und da wird das Manifest mit generiert. Aber wenn Du mit der Option -cp java startest ist auch egal was im Manifest steht. Die Syntax ist dann:
java -cp name1.jar:name2.jar klassenname
Man kann auch mehr als zwei jar Dateien angeben, sie müssen nur durch : getrennt sein (bei Windows ist es ein ; ). Der Klassenname muss inklusive aller Packages sein. Also z.B.: com.zetcode.Test.
Alles klar, danke.

Gruß ralli
Wer nicht lieben kann, muß hassen. Wer nicht aufbauen kann muß zerstören. Wer keine Brücken baut, muß spalten.

Benutzeravatar
ralli
Beiträge: 3919
Registriert: 02.03.2008 08:03:02

Re: Java Hauptklasse nicht gefunden

Beitrag von ralli » 30.11.2023 13:56:09

TRex hat geschrieben: ↑ zum Beitrag ↑
30.11.2023 13:38:42
Kleiner Tipp zur Nachvollziehbarkeit bei Quellcode: den ganzen Code posten (nopaste) oder die Quelle verlinken -> https://zetcode.com/db/apachederbytutorial/jdbc/
OK, dachte der Anfang reicht für einen Programmierer, wo es die Fehlermeldung mit der falschen Hauptklasse gab. zetcode.com benutz ich schon seit Jahren, da hab ich viel gelernt.

Gruß ralli
Wer nicht lieben kann, muß hassen. Wer nicht aufbauen kann muß zerstören. Wer keine Brücken baut, muß spalten.

Benutzeravatar
shoening
Beiträge: 898
Registriert: 28.01.2005 21:05:59
Lizenz eigener Beiträge: MIT Lizenz

Re: Java Hauptklasse nicht gefunden

Beitrag von shoening » 30.11.2023 14:06:53

Hi,

der Fehler im Manifest ist, dass bei Main-Class auch das package angegeben werden muss, also:

Main-Class: com.zetcode.CreateCars

Viele Grüße
Stefan
Bürokratie kann man nur durch ihre Anwendung bekämpfen.

Benutzeravatar
ralli
Beiträge: 3919
Registriert: 02.03.2008 08:03:02

Re: Java Hauptklasse nicht gefunden

Beitrag von ralli » 30.11.2023 14:16:45

Und so erstellen wir manuell eine demodb.jar Datei:

Wir erstellen im Verzeichnis der Quellcodedatei /home/ralph/Arbeit/Entwicklung/Java/Derby (bei mir)

die Datei Manifest.mf mit einem Editor unserer Wahl mit folgendem Inhalt:

Code: Alles auswählen

Manifest-Version: 1.0
Created-By: “Ralph XXXXX”
Main-Class: demodb
Class-Path: /home/ralph/jdk1.8.0_111/db/lib/derby.jar
Wir erzeugen die demodb.jar mit

Code: Alles auswählen

jar cvfm demodb.jar Manifest.mf *.class
Bei Erfolg kommt die Ausagbe:

Code: Alles auswählen

Manifest wurde hinzugefügt
demodb.class wird hinzugefügt(ein = 1069) (aus = 679)(36 % verkleinert)
Jetzt können wir die jar Datei starten mit:

Code: Alles auswählen

java -jar demodb.jar
In meinem Fall wird bei Erfolg ohne Fehlermeldung ausgegeben:

Code: Alles auswählen

Database shutdown normally
was in meinem Fall richtig ist. Bei Bedarf für andere Fälle muß natürlich die Manifest.mf angepaßt werden.

Jetzt kann ich den Quellcode (der bei dem neuen Ansatz nicht von zetcode.com stammt) für den weiteren Ausbau erweitern. Die erfolgreiche Verbindung war ja der Grundstein.

Gruß ralli
Wer nicht lieben kann, muß hassen. Wer nicht aufbauen kann muß zerstören. Wer keine Brücken baut, muß spalten.

Benutzeravatar
ralli
Beiträge: 3919
Registriert: 02.03.2008 08:03:02

Re: Java Hauptklasse nicht gefunden

Beitrag von ralli » 30.11.2023 14:22:22

shoening hat geschrieben: ↑ zum Beitrag ↑
30.11.2023 14:06:53
Hi,

der Fehler im Manifest ist, dass bei Main-Class auch das package angegeben werden muss, also:

Main-Class: com.zetcode.CreateCars

Viele Grüße
Stefan
Danke Stefan, gut zu wissen.

Gruß ralli
Wer nicht lieben kann, muß hassen. Wer nicht aufbauen kann muß zerstören. Wer keine Brücken baut, muß spalten.

Benutzeravatar
ralli
Beiträge: 3919
Registriert: 02.03.2008 08:03:02

Re: Java Hauptklasse nicht gefunden

Beitrag von ralli » 30.11.2023 17:52:47

homer65 hat geschrieben: ↑ zum Beitrag ↑
30.11.2023 11:24:39
Beim Manifest bin ich leider überfragt. Erzeuge jar Dateien immer mit Eclipse und da wird das Manifest mit generiert. Aber wenn Du mit der Option -cp java startest ist auch egal was im Manifest steht. Die Syntax ist dann:
java -cp name1.jar:name2.jar klassenname
Man kann auch mehr als zwei jar Dateien angeben, sie müssen nur durch : getrennt sein (bei Windows ist es ein ; ). Der Klassenname muss inklusive aller Packages sein. Also z.B.: com.zetcode.Test.
Hallo,

habe nun den Mate Desktop neu installiert und openjdk17 komplett. Ist die Eclipse IDE für Java nicht unter Debian verfügbar? Oder welches Paket muß ich für die Java Entwicklung installieren? Oder muß ich den Eclipse installer downloaden und im Filter für die Installation Java Entwicklung aktivieren. Habe noch nie mit Eclipse gearbeitet und möchte das jetzt nachholen.

Gruß ralli
Wer nicht lieben kann, muß hassen. Wer nicht aufbauen kann muß zerstören. Wer keine Brücken baut, muß spalten.

Benutzeravatar
shoening
Beiträge: 898
Registriert: 28.01.2005 21:05:59
Lizenz eigener Beiträge: MIT Lizenz

Re: [Gelöst] Java Hauptklasse nicht gefunden

Beitrag von shoening » 30.11.2023 19:29:38

Hi,

wenn ich eine Empfehlung abgeben darf.

IDEs sind zwar eine schöne Sache, weil sie einem viel Arbeit abnehmen. Wenn Du allerdings irgendwann mehr als damit „spielen“ willst, solltest Du deine Projekte mit
Apache Maven oder mit Gradle bauen.

Zu Gradle kann ich jetzt nicht soviel sagen - aber bei Maven war (zumindest immer wenn ich damit zu tun hatte) die Zusammenarbeit mit Eclipse eher gruselig. Das hat mit Netbeans wesentlich besser funktioniert.

Viele Grüße
Stefan
Bürokratie kann man nur durch ihre Anwendung bekämpfen.

Benutzeravatar
ralli
Beiträge: 3919
Registriert: 02.03.2008 08:03:02

Re: [Gelöst] Java Hauptklasse nicht gefunden

Beitrag von ralli » 30.11.2023 19:40:43

Hallo und danke.

Das mit Eclipse hat sich bereits erledigt, ich kenne seit vielen Jahren einige IDE's. Hab es mir angesehen, Eclipse ist extrem unübersichtlich. Mit Netbeans habe ich schon einiges gemacht. Gut strukturiert und es funktioniert. Auch der GUI Designer für Swing ist unübertrefflich gut. Maven werde ich mir mal anschauen, ein guter Tipp.

Grüße ralli
Wer nicht lieben kann, muß hassen. Wer nicht aufbauen kann muß zerstören. Wer keine Brücken baut, muß spalten.

Antworten