2014-12-08 11 views
7

Próbuję użyć JUnit w makefile, ale nie mogę go uruchomić.javac junit daje "błąd: pakiet org.junit nie istnieje"

Moja struktura folderów jest następująca (makefile jest w myproject):

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

gdzie/główny zawiera główne plików/test zawiera pliki testowe i/lib zawiera hamcrest-core-1.3.jar i junit-4.12.jar

Moje makefile jest w następujący sposób:

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 

Kiedy biegnę make test otrzymuję następujący:

~/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.*; 

... 

W Eclipse testy działają doskonale. Co ja robię źle?

+1

patrząc na swojej strukturze folderów wydaje 'lib' jest wewnątrz' test' folderu, jeśli jest ona wtedy myślę, że '$ (LIB)' lokalizacja musi być zmieniony –

+0

Czemu rurociągowy (nieistniejąca) wynik z 'mkdir' na' javac? Powinieneś prawdopodobnie zacytować argument ''lib/*. Jar'', aby uniknąć rozszerzenia powłoki również. –

+0

@SajanChandran Dzięki, naprawione. Edytowałem mój OP. Nadal dostaję ten sam błąd. – xqtr

Odpowiedz

4

EDIT znalazłem odpowiedź

Ok, więc czytałem trochę więcej i wprowadziła pewne zmiany.

pierwszy w strukturze:

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

z here.

A mój nowy 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 

więc zmiany są:

LIB = 'src/test/lib/*:src/main/java' 
  • cudzysłowy wokół ścieżki klasy
  • * zamiast * .jar
  • Classpat h do głównej
  • Ścieżka klas do plików klas nie powinna zawierać *
  • Wiele plików ma szerokość ":" w systemie Linux i ";" w systemie Windows

z here.

JAVAC_FLAGS = -g -d 'bin/' 

zapomniałem to $(JAVAC_FLAGS) do test tak, że nie kierować odpowiedniego folderu (root/bin zamiast /).

Dzięki za pomoc!

+1

Dziękujemy za nie tylko odpowiedź na własne pytanie, ale także wysoki poziom szczegółowości! Jest to bardzo doceniane! –

+1

Ty, mój przyjacielu, ocaliłeś dzień i nauczyłeś mnie czegoś. <3 <3 <3 – Yonk

Powiązane problemy