web-dev-qa-db-ja.com

javac junitは「エラー:パッケージorg.junitが存在しません」と表示します

MakefileでJUnitを使用しようとしていますが、動作させることができません。

私のフォルダ構造は次のとおりです(makefileはmyProjectにあります):

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

ここで、/ mainにはメインファイルが含まれ、/ testにはテストファイルが含まれ、/ libにはhamcrest-core-1.3.jarjunit-4.12.jarが含まれます。

私のメイクファイルは次のとおりです。

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では、テストは完全に正常に機能します。私は何が間違っているのですか?

8
xqtr

回答を編集

さて、私はもう少し読んで、いくつかの変更を加えました。

私の構造の最初:

_|--bin
|--src
    |--main
    |   |--Java
    |       |--myPackage
    |--test
        |--Java
        |   |--myPackage
        |--lib
_

ここ から。

そして私の新しいメイクファイル:

_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の代わりに
  • メインへのクラスパス
  • クラスファイルへのクラスパスには*を含めないでください
  • 複数のファイルは、Linuxでは幅「:」と「;」で区切られます。 Windowsの場合

ここ から。

_JAVAC_FLAGS = -g -d 'bin/'
_

$(JAVAC_FLAGS)testに含めるのを忘れたため、適切なフォルダー(bin /ではなくroot /)がターゲットになりませんでした。

助けてくれてありがとう!

4
xqtr