Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javacjunit给出了;错误:包org.junit不存在;_Java_Junit_Makefile_Javac - Fatal编程技术网

javacjunit给出了;错误:包org.junit不存在;

javacjunit给出了;错误:包org.junit不存在;,java,junit,makefile,javac,Java,Junit,Makefile,Javac,我试图在生成文件中使用JUnit,但无法使其正常工作 我的文件夹结构如下(makefile位于myProject中): 其中/main包含主文件,/test包含测试文件,/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

我试图在生成文件中使用JUnit,但无法使其正常工作

我的文件夹结构如下(makefile位于myProject中):

其中/main包含主文件,/test包含测试文件,/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
当我运行
maketest
时,我得到以下信息:

~/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中,测试工作得非常好。我做错了什么?


编辑找到了答案

好的,我读了更多的内容,做了一些修改

我的结构中的第一个:

|--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'

和我的新makefile:

|--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'
因此更改如下:

|--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中,多个文件以“:”和“;”分隔在窗户里

我忘记将
$(JAVAC_标志)
包含到
测试中,因此它没有指向正确的文件夹(root/而不是bin/)


谢谢你的帮助

通过查看您的文件夹结构,似乎
lib
test
文件夹中,如果是,那么我认为您的
$(lib)
位置需要更改。您为什么要将
mkdir
的(不存在的)输出传输到
javac中?您可能应该引用
'lib/*.jar'`参数,以避免shell也对其进行扩展。@SajanChandran谢谢,修复了。我已经编辑了我的作品。仍然会出现同样的错误。@EtanReisner谢谢,修复了,修复了。我已经编辑了我的作品。仍然得到同样的错误。感谢你不仅回答了你自己的问题,而且提供了大量的细节!非常感谢!你,我的朋友,拯救了这一天,教会了我一些东西。