Derby/JavaDB No suitable driver found

Nachtfalke

Aktives Mitglied
Hallo zusammen,

ich bin hier gerade am Verzweifeln. Ich habe ein Projekt unter NetBeans 6.9.1. In diesem Projekt wird eine Verbindung zu einer inline Derby-DB geöffnet. Das hat auch bis vor etwa zwei Stunden gut funktioniert. Dann bin ich auf die dumme Idee gekommen, ich könnte ja mal Ordnung machen und die benutzen Libraries, also auch die Derby-Library, in einen neuen Unterordner verschieben. Natürlich habe ich die Referenzen auf die Libraries in NetBeans aktualisiert. In der IDE läuft die Applikation auch wieder einwandfrei. Wenn ich aber aus dem Projekt ein Jar baue und die Applikation dann darüber aufrufe, bekomme ich o.g. Fehler. Vor der Aufräumaktion hat auch die Ausführung des Jars einwandfrei funktioniert. Hat irgendjemand eine Idee, wo der Fehler liegen könnte?
 
Kontrollier mal die Classpath Pfadangaben im generierten jar-file.
Falls du folgende Struktur hast:
Code:
<project_root>/lib/derby/derbyDriver.jar
macht Netbeans dir daraus in der jar als Classpath angabe:
Code:
lib/derbyDriver.jar
solang man nichts umstellt.
 
Netbeans erstellt dir in deinem generierten Jar file eine MANIFEST.MF datei, dadrin steht die Classpath angabe.
 
Nope. Tut es nicht.

manifest.mf:
Code:
Manifest-Version: 1.0
Main-Class: myProject.myApp
SplashScreen-Image: META-INF/splash.png
Implementation-Version: 1.0 Build 192

Name: org/apache/derby/impl/tools/sysinfo/
Sealed: false

Name: org/apache/derby/iapi/services/context/
Sealed: false

Name: org/apache/derby/iapi/services/info/
Sealed: false

Name: org/apache/derby/jdbc/
Sealed: false

Name: org/apache/derby/info/
Sealed: false

Name: org/apache/derby/iapi/services/i18n/
Sealed: false

Name: org/apache/derby/iapi/tools/i18n/
Sealed: false

Name: org/apache/derby/loc/
Sealed: false

Name: org/apache/derby/tools/
Sealed: false

Name: org/apache/derby/impl/drda/
Sealed: false

Name: org/htmlparser/Parser.class
Java-Bean: True

Name: org/htmlparser/beans/StringBean.class
Java-Bean: True

Name: org/htmlparser/beans/HTMLTextBean.class
Java-Bean: True

Name: org/htmlparser/beans/LinkBean.class
Java-Bean: True

Name: org/htmlparser/beans/HTMLLinkBean.class
Java-Bean: True

Name: com/jidesoft/swing/JideButton.class
Java-Bean: True

Name: com/jidesoft/swing/JideToggleButton.class
Java-Bean: True

Name: com/jidesoft/swing/JideSplitButton.class
Java-Bean: True

Name: com/jidesoft/swing/JideToggleSplitButton.class
Java-Bean: True

Name: com/jidesoft/swing/JideTabbedPane.class
Java-Bean: True

Name: com/jidesoft/swing/AutoCompletionComboBox.class
Java-Bean: True

Name: com/jidesoft/swing/AutoResizingTextArea.class
Java-Bean: True

Name: com/jidesoft/swing/CheckBoxList.class
Java-Bean: True

Name: com/jidesoft/swing/CheckBoxTree.class
Java-Bean: True

Name: com/jidesoft/swing/JideScrollPane.class
Java-Bean: True

Name: com/jidesoft/swing/LabeledTextField.class
Java-Bean: True

Name: com/jidesoft/swing/RangeSlider.class
Java-Bean: True

Name: com/jidesoft/swing/StyledLabel.class
Java-Bean: True

Name: com/jidesoft/spinner/DateSpinner.class
Java-Bean: True
 
Hast du den Treiber denn unter Bibliotheken hinzugefügt?
Du kannst den ClassPath teil auch von hand zum Manifest hinzufügen, dann sollte er den Treiber finden.
 
Hast du den Treiber denn unter Bibliotheken hinzugefügt?
Du kannst den ClassPath teil auch von hand zum Manifest hinzufügen, dann sollte er den Treiber finden.

Das werde ich mal probieren. Aber ich habe da wenig Hoffnung, denn vor der Umbauaktion lief es auch ohne den Eintrag.

Klick mal mit der rechten Maustaste auf den Projektnamen, dann mal Properties und dann auf Libaries.
Ist dort der Treiber aufgeführt? Wenn nicht musst du ihn dort dem Projekt bekannt machen.
Hilfestellung findest du dazu hier: NetBeans externe Bibliotheken bekannt machen - Byte-Welt Wiki

Wenn die Bibliothek resp. der Treiber dort nicht eingetragen wäre, würde das Projekt innerhalb der IDE auch nicht laufen.
 
Jetzt bin ich einen Schritt weiter. Ich benutze jarjar, um alle Bibliotheken in ein jar-File zu packen. Schalte ich jarjar in der build.xml ab, funktioniert die Verbindung zur DB wieder einwandfrei. Es liegt also vermutlich am jarjar. Was ich aber nicht verstehe ist, warum es nach der Aufräumaktion nicht mehr funktioniert, denn an der build.xml habe ich nichts geändert. Hier die Build.xml:

[XML]<?xml version="1.0" encoding="UTF-8"?>

<project name="myProject" default="default" basedir=".">
<description>Builds, tests, and runs the project myProject.</description>
<import file="nbproject/build-impl.xml"/>
<import file="nbproject/profiler-build-impl.xml"/>

<target name="-post-jar">
<property name="version.num" value="1.0"/>
<buildnumber file="build.num"/>

<move file="dist/myProject.jar" tofile="dist/myProjecttmp.jar"/>
<taskdef name="jarjar" classname="com.tonicsystems.jarjar.JarJarTask" classpath="d:\\Softwaredeveloping\\jarjar.jar"/>
<jarjar jarfile="dist/myProject.jar" filesetmanifest="mergewithoutmain">
<zipfileset src="dist/myProjecttmp.jar"/>
<zipgroupfileset dir="dist/lib" includes="*.jar"/>
<manifest>
<attribute name="Main-Class" value="myProject.myApp"/>
<attribute name="SplashScreen-Image" value="META-INF/splash.png"/>
<attribute name="Implementation-Version" value="${version.num} Build ${build.number}"/>
</manifest>
</jarjar>
<delete file="dist/myProjecttmp.jar"/>
</target>

</project>
[/XML]
 
http://code.google.com/p/jarjar/ hat gesagt.:
How does it work?

Jar Jar Links includes an Ant task that extends the built-in jar task. The normal zipfileset element is used to embed jar files. A new rule element is added which uses wildcards patterns to rename the embedded class files. Bytecode transformation (via ASM) is used to change references to the renamed classes, and special handling is provided for moving resource files and transforming string literals.

Das klingt ja fieß...

Pack das Projekt mal mit OneJar, da werden die libs nicht erst auseinander gepfückt (und möglicherweise falsch wieder zusammengesetzt). Das hat bei mir bisher immer funktioniert - selbst mit nativen Libs wie dem Oracle Treiber:

http://www.java-forum.org/java-basi...n-jar-datei-externen-libaries.html#post615946
 
Danke für den Tipp. Ich habe mir one-jar mal angesehen. Irgendwie will das aber nicht. Ich benutze jetzt folgendes Build.xml:
[XML]<?xml version="1.0" encoding="UTF-8"?>

<project name="myProject" default="default" basedir=".">

<description>Builds, tests, and runs the project myProject.</description>
<import file="nbproject/build-impl.xml"/>
<import file="nbproject/profiler-build-impl.xml"/>

<property name="one-jar.version" value="0.97" />

<path id="oneJar.Classpath">
<pathelement location="${basedir}/one-jar/one-jar-ant-task-${one-jar.version}.jar" />
</path>

<taskdef name="one-jar" classname="com.simontuffs.onejar.ant.OneJarTask" classpathref="oneJar.Classpath" />
<one-jar destfile="dist/myProject-standalone.jar" manifest="manifest.mf">
<main>
<fileset dir="dist/">
<include name="**/*.jar" />
</fileset>
</main>
<lib>
<fileset dir="dist/lib">
<include name="**/*.jar" />
</fileset>
</lib>
</one-jar>
</project>
[/XML]
Funktioniert nur leider nicht. Während des Builds läuft NetBeans in eine Endlosschleife 🙁
 
Das lässt sich jetzt so schwer sagen was bei dir nicht läuft.

Ich baue auch nie direkt über netbeans sondern direkt immer mit ANT auf der Commandline oder per Eclipse ANT View. PAck doch einfach mal ein paar <echo>blabliblub</echo> mit in die build.xml damit du siehts wo es hängt.

Ich glaube das Problem ist wie du das Script in die schon bestehenden netbeans scripte einbindest. Du musst da glaub ich die targest für überschreiben wie auch schon oben: <target name="-post-jar">...
 
Das mit dem Target-Tag war ein guter Tipp. Jetzt läuft zumindest der Build durch, aber das jar lässt sich nicht starten. Ich glaub, ich geb's auf 🙁
 
Nochmal Danke an alle für die Hilfe. Ich habe das Problem jetzt anderweitig gelöst. Ich verwende wieder jarjar. Das ursprüngliche Problem habe ich identifizieren und lösen können.
 

Zurück
Oben