kieselnator: Hilfe bei Benutzung von *.jar bei Compiler

Hallo zusammen!

Ich hab die Aufgabe bekommen, ein Test eines Programms (Quelltext unten) laufen zu lassen.

Dafür sollte ich mir von einer Seite (http://github.com/KentBeck/junit/downloads) Die Datei junit4.8.2.jar herunterladen und im Lib-Ordner meines Java-Compiler ablegen.

Ich soll jetzt dafür sorgen, dass mein Compiler diese Datei benutzen kann.

Als ich ds Programm jetzt in der Cmd gestartet hab, wurden mit allerdings sehr viele Fehler(auch unten...) angezeigt, die darauf hinauswollen, dass verwendete Funktionen nicht bekannt sind. Die sind allerdings in dieser Bibliothek.

Wie kann ich dafür sorgen dass der Compiler die Datei nutzen kann?

mfg Kiesel Stein

PS: DANKEEEE!

Quellcode:

import static org.junit.Assert.*;
import org.junit.*;

public class MathLib {

@Test public void testSqrt1() {
        double d = sqrt(4);
        assertEquals("sqrt(4) should be 2",2.0,d,1e-15);
    }

@Test public void testSqrt2() {
        double d = sqrt(9);
        assertEquals("sqrt(9) should be 3",3.0,d,1e-15);
    }

@Test public void testSqrt3() {
        double d = sqrt(-1);
        assertEquals("sqrt(-1) should be NaN",Double.NaN,d,1e-15);
    }

@Test public void testAbs1() {
        double t = abs(2);
        assertEquals("abs(2) should be 2", 2.0, t,1e-15);
    }

@Test public void testAbs2() {
        double t = abs(0);
        assertEquals("abs(0) should be 0", 0.0, t,1e-15);
    }

@Test public void testAbs3() {
        double t = abs(-3);
        assertEquals("abs(-3) should be 3", 3.0, t,1e-15);
    }

@Test public void testAbs4() {
        double t = abs(Double.NaN);
        assertEquals("abs(NaN) should be NaN", Double.NaN, t,1e-15);
    }

public static double abs(double a) {
        //        if (a < 0) return -a;
        // else return a;
        return a>=0 ? a : -a;
    }

public static double sqrt(int input) {
       if (input < 0) return Double.NaN;
       double epsilon = 1e-15;
       double c = (double) input;
       double t = c;
       while (abs(t-c/t) > t*epsilon) {
           t = (c/t + t) / 2.0;
       }
       return t;
    }

}

die Fehler:

C:\Users\Kriegel\Desktop\hhu\Vorlesung\Beispiele\05\MathLib.java:1: package org.junit does
import static org.junit.Assert.*;
                       ^
C:\Users\Kriegel\Desktop\hhu\Vorlesung\Beispiele\05\MathLib.java:2: package org.junit does
import org.junit.*;
^
C:\Users\Kriegel\Desktop\hhu\Vorlesung\Beispiele\05\MathLib.java:7: cannot find symbol
symbol  : class Test
location: class MathLib
    @Test public void testSqrt1() {
     ^
C:\Users\Kriegel\Desktop\hhu\Vorlesung\Beispiele\05\MathLib.java:13: cannot find symbol
symbol  : class Test
location: class MathLib
    @Test public void testSqrt2() {
     ^
C:\Users\Kriegel\Desktop\hhu\Vorlesung\Beispiele\05\MathLib.java:18: cannot find symbol
symbol  : class Test
location: class MathLib
    @Test public void testSqrt3() {
     ^
C:\Users\Kriegel\Desktop\hhu\Vorlesung\Beispiele\05\MathLib.java:24: cannot find symbol
symbol  : class Test
location: class MathLib
    @Test public void testAbs1() {
     ^
C:\Users\Kriegel\Desktop\hhu\Vorlesung\Beispiele\05\MathLib.java:29: cannot find symbol
symbol  : class Test
location: class MathLib
    @Test public void testAbs2() {
     ^
C:\Users\Kriegel\Desktop\hhu\Vorlesung\Beispiele\05\MathLib.java:34: cannot find symbol
symbol  : class Test
location: class MathLib
    @Test public void testAbs3() {
     ^
C:\Users\Kriegel\Desktop\hhu\Vorlesung\Beispiele\05\MathLib.java:39: cannot find symbol
symbol  : class Test
location: class MathLib
    @Test public void testAbs4() {
     ^
C:\Users\Kriegel\Desktop\hhu\Vorlesung\Beispiele\05\MathLib.java:9: cannot find symbol
symbol  : method assertEquals(java.lang.String,double,double,double)
location: class MathLib
        assertEquals("sqrt(4) should be 2",2.0,d,1e-15);
        ^
C:\Users\Kriegel\Desktop\hhu\Vorlesung\Beispiele\05\MathLib.java:15: cannot find symbol
symbol  : method assertEquals(java.lang.String,double,double,double)
location: class MathLib
        assertEquals("sqrt(9) should be 3",3.0,d,1e-15);
        ^
C:\Users\Kriegel\Desktop\hhu\Vorlesung\Beispiele\05\MathLib.java:20: cannot find symbol
symbol  : method assertEquals(java.lang.String,double,double,double)
location: class MathLib
        assertEquals("sqrt(-1) should be NaN",Double.NaN,d,1e-15);
        ^
C:\Users\Kriegel\Desktop\hhu\Vorlesung\Beispiele\05\MathLib.java:26: cannot find symbol
symbol  : method assertEquals(java.lang.String,double,double,double)
location: class MathLib
        assertEquals("abs(2) should be 2", 2.0, t,1e-15);
        ^
C:\Users\Kriegel\Desktop\hhu\Vorlesung\Beispiele\05\MathLib.java:31: cannot find symbol
symbol  : method assertEquals(java.lang.String,double,double,double)
location: class MathLib
        assertEquals("abs(0) should be 0", 0.0, t,1e-15);
        ^
C:\Users\Kriegel\Desktop\hhu\Vorlesung\Beispiele\05\MathLib.java:36: cannot find symbol
symbol  : method assertEquals(java.lang.String,double,double,double)
location: class MathLib
        assertEquals("abs(-3) should be 3", 3.0, t,1e-15);
        ^
C:\Users\Kriegel\Desktop\hhu\Vorlesung\Beispiele\05\MathLib.java:41: cannot find symbol
symbol  : method assertEquals(java.lang.String,double,double,double)
location: class MathLib
        assertEquals("abs(NaN) should be NaN", Double.NaN, t,1e-15);
        ^
16 errors

  1. Hallo,

    Wie kann ich dafür sorgen dass der Compiler die Datei nutzen kann?

    Du kannst mal versuchen, die JVM mit

    java -classpath c:\pfad\zu\Junit-jar\junit4.8.2.jar

    zu starten.

    Viele Grüße,
    Jörg

    PS: Da das offenbar Teil einer Java-Einsteiger-Vorlesung ist, erwähn ichs mal: Das was Du meinst ist die virtuelle Maschine (JVM), nicht der Java-Compiler! Der Java-Compiler ("javac") baut Dir aus *.java-Dateien den für die JVM ausführbaren Code, die JVM ("java") führt den Code nur aus, compiliert aber dabei nix. Ist ein grundleger Unterschied, der für Prüfungen o.ä. evtl. ziemlich wichtig ist.

    1. Und wie vermeide ich dann diesen Fehlerhagel, dass es diese Funktionene nicht gibt?

      1. Hallo,

        Und wie vermeide ich dann diesen Fehlerhagel, dass es diese Funktionene nicht gibt?

        Wie gesagt, die Angabe des Classpathes sollte eigentlich reichen:
        Das JAR-File muss in einem Verzeichnis liegen, welches der JVM in irgendeiner Weise bekannt ist.

        Das kann:

        • das aktuelle Verzeichnis sein
        • ein Verzeichnis sein, welches in der Umgebungsvariable CLASSPATH definiert
            ist
        • ein Verzeichnis bzw. der Pfad zu einer JAR-Datei sein, welches Du über
            die Option "-classpath" der virtuellen Maschine mitgibst (siehe
            vorhergehender Post von mir)

        Mehr Details zum Thema Classpath findest Du hier

        Hoffe, das hilft Dir weiter.

        Viele Grüße,
        Jörg

        1. Na schön, hier nochmal die Fehler!

          MathLib.java:1: package org.junit does not exist
          import static org.junit.Assert.*;
                                 ^
          MathLib.java:2: package org.junit does not exist
          import org.junit.*;
          ^
          MathLib.java:7: cannot find symbol
          symbol  : class Test
          location: class MathLib
              @Test public void testSqrt1() {
               ^
          MathLib.java:13: cannot find symbol
          symbol  : class Test
          location: class MathLib
              @Test public void testSqrt2() {
               ^
          MathLib.java:18: cannot find symbol
          symbol  : class Test
          location: class MathLib
              @Test public void testSqrt3() {
               ^
          MathLib.java:24: cannot find symbol
          symbol  : class Test
          location: class MathLib
              @Test public void testAbs1() {
               ^
          MathLib.java:29: cannot find symbol
          symbol  : class Test
          location: class MathLib
              @Test public void testAbs2() {
               ^
          MathLib.java:34: cannot find symbol
          symbol  : class Test
          location: class MathLib
              @Test public void testAbs3() {
               ^
          MathLib.java:39: cannot find symbol
          symbol  : class Test
          location: class MathLib
              @Test public void testAbs4() {
               ^
          MathLib.java:9: cannot find symbol
          symbol  : method assertEquals(java.lang.String,double,double,double)
          location: class MathLib
                  assertEquals("sqrt(4) should be 2",2.0,d,1e-15);
                  ^
          MathLib.java:15: cannot find symbol
          symbol  : method assertEquals(java.lang.String,double,double,double)
          location: class MathLib
                  assertEquals("sqrt(9) should be 3",3.0,d,1e-15);
                  ^
          MathLib.java:20: cannot find symbol
          symbol  : method assertEquals(java.lang.String,double,double,double)
          location: class MathLib
                  assertEquals("sqrt(-1) should be NaN",Double.NaN,d,1e-15);
                  ^
          MathLib.java:26: cannot find symbol
          symbol  : method assertEquals(java.lang.String,double,double,double)
          location: class MathLib
                  assertEquals("abs(2) should be 2", 2.0, t,1e-15);
                  ^
          MathLib.java:31: cannot find symbol
          symbol  : method assertEquals(java.lang.String,double,double,double)
          location: class MathLib
                  assertEquals("abs(0) should be 0", 0.0, t,1e-15);
                  ^
          MathLib.java:36: cannot find symbol
          symbol  : method assertEquals(java.lang.String,double,double,double)
          location: class MathLib
                  assertEquals("abs(-3) should be 3", 3.0, t,1e-15);
                  ^
          MathLib.java:41: cannot find symbol
          symbol  : method assertEquals(java.lang.String,double,double,double)
          location: class MathLib
                  assertEquals("abs(NaN) should be NaN", Double.NaN, t,1e-15);
                  ^
          16 errors

          Das package existiert nicht, darum funzt es nicht.

          Egal was ich auch probiert hab, das klappt einfach nicht.

          beim -classpath attribut sagt er ja noch nix, aber dannnnn...

          1. Hallo,

            Das package existiert nicht, darum funzt es nicht.

            Jo, offenbar zieht er das JAR-File noch nicht an.

            Wie genau sieht der Aufruf Deines Programms in der JVM aus?

            Viele Grüße,
            Jörg

            1. Hmmm!

              Mal überlegen, wenn das Programm nicht kompiliert werden konnte, welche Klasse soll die Virtual Machine dann ausgeben?

              Nüscht!

              Fehler!

              Error!

              1. Moin,

                Mal überlegen, wenn das Programm nicht kompiliert werden konnte, welche Klasse soll die Virtual Machine dann ausgeben?

                Nun gut, wenn das compilieren fehlschlägt, wie sieht also der Aufruf des Compilers aus? Das Attribut "classpath" kannste ja auch da setzen:

                javac -classpath C:\Pfad\Zu\Deinem\JarFile\JarFile.jar DeineJavaDatei

                Viele Grüße,
                Jörg

                1. Wieder alle Fehler auf einmal...

                  1. Wieder alle Fehler auf einmal...

                    Also, ich habe mal gerade ein Java-Testprogramm gebaut:

                    TestMe.java:

                    import static org.junit.Assert.*;
                    import org.junit.*;
                    import org.junit.Test;

                    public class TestMe {
                       @Test public void testMe () {
                          assertEquals("Test", "Test");
                       }
                    }

                    JUnit hab ich runtergeladen und auf eine andere Platte geschoben (Linux-System, daher "/media/sdb5/")

                    javac -classpath /media/sdb5/junit-4.8.2.jar TestMe.java

                    funktioniert.

                    Das muss eigentlich schon so gehen. Ich habe hier OpenJDK (also nicht das Java von SUN), aber das müsste egal sein.