2016-07-06 23 views
0

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 - fitnesse error

Antwort

0

Das Problem stellte sich heraus, Classpath zu sein, da der Fehler angezeigt.

Ich hatte das Classpath an folgenden Änderungen -

!|myPackage.DivisionFixture| 
+0

Das ist nur, wie Java-Klassenladearbeiten - zu

!path /Users/mpalanisamy/learningfitnesse/myProject/bin !define TEST_SYSTEM {fit} 

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. –

+0

@FriedHoeben - Danke. Entfernt meinen Kommentar zum Klassenpfad. Ihre Erklärung ist hilfreich. –

Verwandte Themen