【问题标题】:Java Classpath error-cannot find my classJava Classpath 错误-找不到我的类
【发布时间】:2016-12-03 05:38:09
【问题描述】:

我正在尝试使用 randoop(Java 自动测试生成器)并且 randoop 找不到我的课程:

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

policy = sun.security.provider.PolicyFile@85af80
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

我确信这确实是微不足道的事情,但我对这些事情缺乏经验。

【问题讨论】:

  • home.eliezer.Desktop.myclasses是你的包还是目录结构?
  • @Rp 它是一个目录结构——我只测试一个类,它在 /home/eliezer/myclasses 中,它的名字是 ArrayListError.java
  • 那么你需要将类路径设置为home/eliezer/Desktop/myclasses(你的类路径中缺少'Desktop')并且你需要调用classForName("ArrayListError");
  • @Rp 我现在已经做到了 - 仍然是错误。我如何以及在哪里调用 classForName("ArrayListError") 谢谢
  • 试试java -ea -classpath randoop.1.3.2.jar:/home/eliezer/Desktop/myclasses randoop.main.Main gentests --testclass=ArrayListError

标签: java classpath randoop


【解决方案1】:

您需要设置您的类路径,以便 jvm 能够找到您的所有资源,例如类、文件、jar 等。
在您的情况下,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

应该可以解决您的问题。我建议您搜索设置类路径并继续阅读。

【讨论】:

  • 在您的回复中提及对 --testclass 的更改 - 这非常相关。不错的收获。
【解决方案2】:

在命令行上检查你的类路径; 我看到home/eliezer/myclasses,没有前导/

【讨论】:

  • 然后您将桌面添加到路径中?在这一点上,这有点令人困惑。
  • 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
【解决方案3】:

这是错误的

我的类名为 ArrayListError.java,位于 /home/eliezer/Desktop/myclasses。

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

编辑: 既然你说你也有.class文件,那么你的问题可以通过两种方式解决

一个。没有包裹

运行命令(注意--testclas,它不是目录,应该是类)

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

b.包中的类

如果您的 ArrayListError 确实有 package com.test; 在您的 myclasses 目录中创建一个目录 /com/test 并运行以下命令

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

【讨论】:

  • 我觉得不需要创建jar文件
  • 你不需要创建 jar,只要 compiled 包层次结构的根目录在你的类路径上。
  • 这也在 /home/eliezer/Desktop/myclasses
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-24
  • 1970-01-01
  • 2012-05-15
  • 1970-01-01
  • 1970-01-01
  • 2020-10-13
相关资源
最近更新 更多