0

我的源文件在这个文件夹中:c:\data\mycompany。我所有的源文件都包含以下内容作为第一行:package mycompany; 现在从 c:\data 文件夹中,我使用以下命令编译了所有内容:javac mycompany/*.java -extdirs c:\some\other\folder\with\libs。这编译得很好。现在,当我尝试使用以下命令(再次从 c:\data)执行它时: java mycompany/test 然后我收到此错误:

线程“main”中的异常
java.lang.NoClassDefFoundError:
mycompany/test 原因:
java.lang.ClassNotFoundException:
mycompany.test at java.net.URLClassLoader$1.run(Unknown Source)

我也尝试了以下命令,但它重现了相同的错误:

java mycompany/test -extdirs c:\some\other\folder\with\libs

这是编译/运行的正确方法吗?

这是我的源代码:

package MyCompany;

public class Test
{
  public static void main(String[] args) 
  {
    System.out.println("test");
  } 
}
4

4 回答 4

2

您需要设置类路径。参见例如这个 SO question

于 2010-02-22T20:21:23.060 回答
2

调用 java 时不应使用 extdirs,应使用 -cp 设置类路径

顺便说一句,在调用主 java 类时,您应该提供类名,而不是类的路径,因此,它可能是 mycompany.test(如果您的包含 main 的类名为 test),而不是 mycompany/test。这不是错误,因为 Java 会为您修复它。

于 2010-02-22T20:24:46.400 回答
1

也就是说,.class 文件不在类路径上,您的编译方式应该没问题,当您尝试运行测试代码时,需要将包含生成的 .class 文件的目录添加到类路径中。

java -cp <path to classes> classtorun

所以你的例子可能看起来像

java -cp <path to classes>;<path to libs> mycompany.Test

你真的应该看看ANT来自动化你的编译和构建到一个可执行的 .jar 文件。由于所有重复输入和出错的可能性,没有人手动完成这些繁琐的工作。创建 ANT 是为了避免所有这些细节,让您专注于解决编码问题,而不是与命令行工具搏斗。读这个

于 2010-02-22T20:21:12.910 回答
0

试试这个来编译:

mkdir classes
javac -d classes *.java

仅在第一次创建 /classes 目录。-d 目录告诉 javac 将您的 .class 文件放在 /classes 下。

要运行,请执行以下操作:

java -cp .;classes MyCompany.Test

这应该可以正常工作。

于 2010-02-22T22:27:46.643 回答