【问题标题】:javac junit gives "error: package org.junit does not exist"javac junit 给出“错误:包 org.junit 不存在”
【发布时间】:2015-02-06 10:08:09
【问题描述】:

我正在尝试在 makefile 中使用 JUnit,但我无法让它工作。

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

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

其中 /main 包含主文件,/test 包含测试文件,/lib 包含 hamcrest-core-1.3.jarjunit-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 中,测试工作得非常好。我做错了什么?

【问题讨论】:

  • 通过查看您的文件夹结构,lib 似乎在 test 文件夹内,如果是,那么我认为您的 $(LIB) 位置需要更改
  • 为什么要将mkdir 的(不存在的)输出通过管道传递到javac? You should probably quote the 'lib/*.jar'` 参数以避免shell 也扩展它。
  • @SajanChandran 谢谢,已修复。我已经编辑了我的 OP。仍然得到同样的错误。
  • @EtanReisner 谢谢,已修复。我已经编辑了我的 OP。仍然得到同样的错误。

标签: java junit makefile javac


【解决方案1】:

编辑找到答案

好的,所以我阅读了更多内容并进行了一些更改。

我的结构中的第一个:

|--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
  • 主类路径
  • 类文件的类路径不应包含 *
  • 多个文件在 Linux 中以 ':' 和 ';' 分隔在 Windows 中

来自here

JAVAC_FLAGS = -g -d 'bin/'

我忘记将$(JAVAC_FLAGS) 包含到test,这样它就没有针对正确的文件夹(root/ 而不是 bin/)。

感谢您的帮助!

【讨论】:

  • 感谢您不仅回答了您自己的问题,而且提供了非常详细的信息!非常感谢!
  • 你我的朋友拯救了一天并教会了我一些东西。
猜你喜欢
  • 2020-10-23
  • 2012-09-06
  • 1970-01-01
  • 1970-01-01
  • 2017-07-29
  • 2010-12-20
  • 2011-08-16
  • 2018-05-06
相关资源
最近更新 更多