2014-12-08 5 views
7

Ich versuche, JUnit in einem Makefile zu verwenden, aber ich kann es nicht zur Arbeit bekommen.javac junit gibt "Fehler: Paket org.junit existiert nicht"

Meine Ordnerstruktur ist wie folgt (Make-Datei ist in myProject):

myProject 
|--bin 
|--main 
    |--org 
     |--myPackage 
|--test 
    |--org 
    | |--myPackage 
    | 
    |--lib 

wo/main Hauptdateien enthält,/Test-Dateien enthält, Test und/lib enthält hamcrest-core-1.3.jar und junit-4.12.jar

My Make-Datei ist wie folgt:

JAVAC = javac 
JVM = java 
JAVADOC = javadoc 
MKBIN = mkdir -p bin 

JAVAC_FLAGS = -g -d bin/ 
JAVAC_CP = -cp 

SRC = main/ 
SRCTEST = test/ 
LIB = lib/*.jar 

PACKAGE = org/myPackage/*.java 
TARGET = bin 

MAIN = org.myPackage.Main 

.SUFFIXES : .class .java 

all: 
    $(MKBIN) | $(JAVAC) $(JAVAC_FLAGS) $(SRC)$(PACKAGE) 

test: 
    $(MKBIN) | $(JAVAC) $(JAVAC_CP) $(LIB) $(SRCTEST)$(PACKAGE) 

clean: 
    rm -rf $(TARGET) 

run: 
    $(JVM) $(JAVAC_CP) $(TARGET) $(MAIN) 

.PHONY: all test clean 

Wenn ich renne make test erhalte ich die folgende:

~/myProject | 18:07:29>make test 
mkdir -p bin | javac -cp lib/*.jar test/org/myPackage/*.java 
test/org/myPackage/MyClass.java:3: error: package org.junit does not exist 
import static org.junit.Assert.*; 

... 

In Eclipse funktionieren die Tests einwandfrei. Was mache ich falsch?

+1

Wenn Sie auf Ihre Ordnerstruktur schauen, scheint es 'lib' ist innerhalb' test' Ordner, wenn es dann ist, ich denke, Ihre '$ (LIB)' Ort muss geändert werden –

+0

Warum sind Sie die Rohrleitung (nicht existent) Ausgabe von 'mkdir' in' javac? Sie sollten wahrscheinlich das Argument '' lib/*. Jar'' angeben, um zu vermeiden, dass die Shell es ebenfalls erweitert. –

+0

@SajanChandran Danke, behoben. Ich habe mein OP bearbeitet. Immer noch den gleichen Fehler. – xqtr

Antwort

4

EDIT die Antwort gefunden

Ok, so las ich einige mehr und einige Änderungen vorgenommen.

Erste in meiner Struktur:

|--bin 
|--src 
    |--main 
    | |--java 
    |  |--myPackage 
    |--test 
     |--java 
     | |--myPackage 
     |--lib 

von here.

Und meine neue Make-Datei:

JAVAC = javac 
JVM = java 
JAVADOC = javadoc 
MKBIN = mkdir -p bin 

JAVAC_FLAGS = -g -d 'bin/' 
JAVAC_CP = -cp 

MAINSRC = src/main/java/ 
TESTSRC = src/test/java/ 
LIB = 'src/test/lib/*:src/main/java' 

PKGSRC = myPackage/ 
TARGET = bin 

MAIN = myPackage.Main 

MAINTEST = myPackage.MainTest 

.SUFFIXES : .class .java 

all: 
    $(MKBIN) 
    $(JAVAC) $(JAVAC_FLAGS) $(MAINSRC)$(PKGSRC)* 

test: 
    $(JAVAC) $(JAVAC_FLAGS) $(JAVAC_CP) $(LIB) $(TESTSRC)$(PKGSRC)* 

clean: 
    rm -rf $(TARGET) 

run: 
    $(JVM) $(JAVAC_CP) $(TARGET) $(MAIN) 

run_test: 
    $(JVM) $(JAVAC_CP) $(TARGET) $(MAINTEST) 

.PHONY: all test clean run run_test 

So ist die Änderungen:

LIB = 'src/test/lib/*:src/main/java' 
  • Zitate rund um die Classpath
  • * statt * .jar
  • Klassenpat h to main
  • Klassenpfad zu Klassendateien sollte nicht enthalten *
  • Mehrere Dateien sind getrennt Breite ':' in Linux und ';' in Windows

von here.

JAVAC_FLAGS = -g -d 'bin/' 

Ich vergaß $(JAVAC_FLAGS) zu test enthalten, so dass es nicht den richtigen Ordner Ziel hat (root/statt bin /).

Danke für die Hilfe!

+1

Vielen Dank, dass Sie nicht nur Ihre eigene Frage beantwortet haben, sondern auch einen hohen Detaillierungsgrad haben! Es ist sehr geschätzt! –

+1

Du, mein Freund, hast den Tag gerettet und mir etwas beigebracht. <3 <3 <3 – Yonk