2014-12-08 13 views
7

Sto provando a utilizzare JUnit in un makefile ma non riesco a farlo funzionare.javac junit restituisce "errore: pacchetto org.junit non esiste"

La mia struttura di cartelle è la seguente (makefile è in myProject):

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

dove/principale contiene i file principali,/test contiene file di prova e/lib contiene hamcrest-core-1.3.jar e junit-4.12.jar

mio makefile è come segue:

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 

quando sono in esecuzione make test ottengo il seguente:

012.
~/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 i test funzionano perfettamente. Che cosa sto facendo di sbagliato?

+1

osservando la struttura della cartella sembra che 'lib' si trova nella cartella' test', se è quindi penso che la posizione '$ (LIB)' deve essere cambiata –

+0

Perché stai eseguendo il piping (inesistente) uscita da 'mkdir' in' javac? Probabilmente dovresti citare l'argomento ''lib/*. Jar'' per evitare che la shell lo espanda troppo. –

+0

@SajanChandran Grazie, risolto. Ho modificato il mio OP. Ancora ottenere lo stesso errore. – xqtr

risposta

4

EDIT trovato la risposta

Ok, così ho letto un po 'di più e ha apportato alcune modifiche.

primo nella mia struttura:

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

da here.

e il mio nuovo makefile:

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 

Così i cambiamenti sono:

LIB = 'src/test/lib/*:src/main/java' 
  • Citazioni in tutto il percorso di classe
  • * invece di * .jar
  • Classpat h to main
  • Classpath ai file di classe non deve includere *
  • Più file sono separati larghezza ':' in Linux e ';' in Windows

da here.

JAVAC_FLAGS = -g -d 'bin/' 

Ho dimenticato di includere $(JAVAC_FLAGS) a test in modo che non bersaglio nella cartella giusta (root/invece di bin /).

Grazie per l'aiuto!

+1

Grazie per non aver solo risposto alla tua domanda, ma fornendo un grande livello di dettaglio! È molto apprezzato! –

+1

Il mio amico ha salvato la giornata e mi ha insegnato qualcosa. <3 <3 <3 – Yonk