2014-12-08 4 views
7

Я пытаюсь использовать JUnit в make-файле, но я не могу заставить его работать.javac junit дает «ошибка: пакет org.junit не существует»

Моя структура папок выглядит следующим образом (Makefile в MyProject):

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

где/главный содержит основные файлы,/тест содержит тестовые файлы и/Библиотека содержит hamcrest-core-1.3.jar и junit-4.12.jar

Мой Makefile является следующим образом:

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 

Когда я бегу make test я получаю следующее:

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

... 

В Eclipse тесты работают отлично. Что я делаю не так?

+1

, глядя на структуру вашей папки, кажется, что 'lib' находится внутри' test', если это так, то я думаю, что ваше местоположение '$ (LIB)' должно быть изменено. –

+0

Почему вы соединяете (несуществующий) вывод из 'mkdir' в' javac? Вероятно, вы должны указать аргумент '' lib/*. Jar'', чтобы избежать расширения оболочки. –

+0

@SajanChandran Спасибо, исправлено. Я отредактировал свой OP. Все равно получите ту же ошибку. – xqtr

ответ

4

EDIT нашел ответ

Итак, я прочитал еще немного и сделал некоторые изменения.

Первый в моей структуре:

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

из here.

И мой новый 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 

Так изменения:

LIB = 'src/test/lib/*:src/main/java' 
  • Котировка вокруг
  • классов
  • * вместо * .jar
  • Classpat h к основному
  • К классу файлов классов не следует включать *
  • Несколько файлов разделены шириной ':' в Linux и ';' в Windows

от here.

JAVAC_FLAGS = -g -d 'bin/' 

Я забыл включить $(JAVAC_FLAGS) к test так, чтобы она не была ориентирована на нужную папку (корневой/вместо бен /).

Спасибо за помощь!

+1

Благодарим вас за то, что вы не только отвечаете на свой вопрос, но и получаете отличный уровень детализации! Его очень ценят! –

+1

Вы, мой друг, спасли день и научили меня чему-то. <3 <3 <3 – Yonk

Смежные вопросы