Dieser Test stammt aus dem Fitnesse-Benutzerhandbuch.Das kanonische Fitnesse-Beispiel konnte nicht ausgeführt werden - java.lang.NoClassDefFoundError
!path /Users/mpalanisamy/learningfitnesse/myProject/bin/myPackage
!path /Users/mpalanisamy/learningfitnesse/myProject/src/myPackage
!path /Users/mpalanisamy/Downloads/fitnesse-standalone.jar
!path /Users/mpalanisamy/Downloads/FitNesseRoot
!define TEST_SYSTEM {fit}
!|DivisionFixture|
|num|denom|quotient()|
|1|2|0.5|
|1|2|0.6|
|4|2|2.0|
Und das System im Test, und Vorrichtungsbau Code ist wie folgt - Division.java
package myPackage;
public class Division {
private double numerator;
private double denominator;
public Division(double a, double b){
this.numerator = a;
this.denominator = b;
}
public double divide(){
return this.numerator/this.denominator;
}
}
DivisionFixture.java
package myPackage;
import myPackage.Division;
public class DivisionFixture extends fit.ColumnFixture{
public double num, denom;
private Division d = new Division(num, denom);
public double quotient(){
return d.divide();
}
}
/Users/mpalanisamy/learningfitnesse/myProject/bin/myPackage - enthält meine .class-Dateien /Benutzer/mpalanisamy/learningfitnesse/myProject/src/myPackage - enthält meine .java-Dateien
Wenn ich diesen Test ausführen, bekomme ich folgende Fehler -
java.lang.NoClassDefFoundError: DivisionFixture (wrong name: myPackage/DivisionFixture)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:264)
at fit.FixtureLoader.loadFixtureClass(FixtureLoader.java:66)
at fit.FixtureLoader.instantiateFixture(FixtureLoader.java:59)
at fit.FixtureLoader.instantiateFirstValidFixtureClass(FixtureLoader.java:82)
at fit.FixtureLoader.disgraceThenLoad(FixtureLoader.java:43)
at fit.Fixture.loadFixture(Fixture.java:142)
at fit.Fixture.getLinkedFixtureWithArgs(Fixture.java:134)
at fit.Fixture.doTables(Fixture.java:79)
at fit.FitServer.process(FitServer.java:81)
at fit.FitServer.run(FitServer.java:56)
at fit.FitServer.main(FitServer.java:41)
Das Ausführungsprotokoll hat dies -
/Library/Java/JavaVirtualMachines/jdk1.8.0_91.jdk/Contents/Home/bin/java -cp /Users/mpalanisamy/Downloads/fitnesse-standalone.jar:/Users/mpalanisamy/learningfitnesse/myProject/bin/myPackage:/Users/mpalanisamy/learningfitnesse/myProject/src/myPackage:/Users/mpalanisamy/Downloads/fitnesse-standalone.jar:/Users/mpalanisamy/Downloads/FitNesseRoot fit.FitServer my_mac.local 53339 3863
- die mir sagt, dass mein Classpath richtig ist, oder dass Fitnesse ist dessen bewusst.
FWIW, alle Dateien haben rwxr-xr-x-Berechtigungen.
Angesichts der oben genannten, warum bekomme ich den NoClassDefFoundError Fehler?
Ich habe StackOverflow durchforstet und die meisten Fixes eingebaut, und trotzdem konnte ich dieses einfache Beispiel nicht ausführen. Angesichts der Art des Fehlers denke ich, dass die Lösung etwas albern von mir ist und/oder im Zusammenhang mit der Konfiguration.
Ein Screenshot von dem, was ich sehe, falls die hilfreich ist -
Das ist nur, wie Java-Klassenladearbeiten - zu
und ändern Sie die erste Zeile meiner Testtabelle. Sie geben das Verzeichnis an, das die Klassendateien enthält, und innerhalb dieses Verzeichnisses ist für jede Pakettebene eine Unterverzeichnisstufe erforderlich. Wenn der Code für die Klasse angibt, dass es sich um 'package myPackage' handelt, muss sich die Klassendatei im Verzeichnis myPackage unterhalb des Verzeichnisses befinden, das Sie als Klassenpfad angeben. –
@FriedHoeben - Danke. Entfernt meinen Kommentar zum Klassenpfad. Ihre Erklärung ist hilfreich. –