2012-08-01 68 views
1

我想使用randoop(用于Java自动测试发生器)和randoop无法找到我的课:Java类路径错误,无法找到我的课

[email protected]:~/Desktop$ java -ea -classpath \ 
randoop.1.3.2.jar:home/eliezer/myclasses \ 
randoop.main.Main gentests \ 
--testclass=/home/eliezer/Desktop/myclasses/ArrayListError 

policy = [email protected] 
Throwable thrown while handling command:java.lang.Error:\ 
classForName(/home/eliezer/Desktop/myclasses/ArrayListError) 
java.lang.Error: classForName(/home/eliezer/Desktop/myclasses/ArrayListError) 
at randoop.util.Reflection.classForName(Reflection.java:206) 
at randoop.util.Reflection.loadClassesFromList(Reflection.java:386) 
at randoop.main.GenInputsAbstract.findClassesFromArgs(GenInputsAbstract.java:507) 
at randoop.main.GenTests.handle(GenTests.java:184) 
at randoop.main.Main.nonStaticMain(Main.java:80) 
at randoop.main.Main.main(Main.java:42) 
Caused by: java.lang.ClassNotFoundException: \ 
/home/eliezer/Desktop/myclasses/ArrayListError 
at java.lang.Class.forName0(Native Method) 
at java.lang.Class.forName(Class.java:186) 
at randoop.util.Reflection.classForName(Reflection.java:198) 
... 5 more 
Randoop failed. 
Last sequence under execution:null 

我的类被称为ArrayListError.java和/home/eliezer/Desktop/myclasses被发现。

randoop文档位于:https://randoop.github.io/randoop/manual/index.html

我相信这是非常平凡的事情,但我对这些事情没有经验。

+0

'home.eliezer.Desktop.myclasses'是你的包或目录结构吗? – 2012-08-01 13:39:25

+0

@Rp它的目录结构 - 我只测试一个类,它在/ home/eliezer/myclasses中,它的名字是ArrayListError.java – 2012-08-01 13:42:23

+0

那么你需要设置classpath为'home/eliezer/Desktop/myclasses'( '你的类路径中缺少'Desktop'),你需要调用'classForName(“ArrayListError”);' – 2012-08-01 13:45:42

回答

2

您需要设置CLASSPATH这样,JVM应该能够找到像类,文件,罐等
在你的情况你所有的资源,ArrayListError被放置在目录/home/eliezer/Desktop/myclasses。你需要把它放在你的类路径中。 一旦您将类路径指向提及的目录,您需要将类名称传递给--testclass=ArrayListError

java -ea -classpath randoop.1.3.2.jar:/home/eliezer/Desktop/myclasses randoop.main.Main gentests --testclass=ArrayListError

应该解决您的问题。我建议你在设置classpath上进行搜索并阅读。

+0

在你的回应中提到--testclass的变化 - 这非常相关。很好的接收。 – 2012-08-01 17:40:46

0

这是错误的

我的类被称为ArrayListError.java和 /家庭/埃利泽/桌面/ myclasses被发现。

您的ArrayListError.java是源代码,但java虚拟机需要在其类路径中编译的类。

编辑: 既然你说你有.class文件还,那么你的问题可以从两个方面

一个来解决。没有包

运行命令(照顾--testclas的,它不是目录,它应该是类)

的java -ea -classpath randoop.1.3.2.jar:/家/ eliezer/myclasses randoop.main.Main gentests --testclass = ArrayListError

b。类包

如果您ArrayListError确实有package com.test;建立一个目录/ COM /测试你的myclasses目录并运行以下

的java -ea命令-classpath randoop.1.3.2。罐子:/家庭/埃利泽/ myclasses/COM /测试/ randoop.main.Main gentests --testclass = com.test.ArrayListError

+0

我已经将ArrayListError编译为ArrayListError.class ... – 2012-08-01 13:45:48

+0

我不认为我需要创建一个jar文件 – 2012-08-01 13:52:05

+0

您不需要创建jar,只要在* compiled *包的根目录下层次结构位于您的类路径中。 – 2012-08-01 13:53:24

0

检查您在命令行上的类路径; 我看到home/eliezer/myclasses,没有领先的/

+0

我已添加/但仍然得到相同的错误 – 2012-08-01 14:02:44

+0

并且您已将Desktop添加到路径中?这一点都有点令人困惑。 – 2012-08-01 14:06:54

+0

eliezer @ ubuntu:〜/ Desktop $ java -ea -classpath randoop.1.3.2.jar:/ home/eliezer/Desktop/myclasses randoop.main.Main gentests --testclass =/home/eliezer/Desktop/myclasses/ArrayListError – 2012-08-01 14:10:19