我的源文件位于此文件夹中:c:\ data \ mycompany。 我的所有源文件都包含以下第一行:package mycompany;现在从c:\ data文件夹,我使用以下命令编译了所有内容:javac mycompany / * .java -extdirs c:\ some \ other \ folder \ with \ libs。编译好了。现在,当我尝试使用此命令执行它(再次从c:\ data):java mycompany / test然后我收到此错误:
线程“main”中的异常
中的mycompany.test
java.lang.NoClassDefFoundError:
mycompany / test引起:
抛出java.lang.ClassNotFoundException:
java.net.URLClassLoader $ 1.run(未知来源)
我也尝试了以下命令,但它重现了同样的错误:
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");
}
}
答案 0 :(得分:2)
您需要设置classpath。请参阅示例this SO question。
答案 1 :(得分:2)
在调用java时你不应该使用extdirs,你应该用-cp
设置你的类路径顺便说一句,在调用主java类时,你应该提供类名,而不是类的路径,因此,它可能是mycompany.test(如果你的包含main的类名为test),而不是mycompany /测试。这不是一个错误,因为Java会为你修复它。
答案 2 :(得分:1)
这就是说.class文件不在类路径上你编译的方式应该没问题,你需要在尝试运行测试代码时将带有生成的.class文件的目录添加到类路径中。
java -cp <path to classes> classtorun
所以你的例子看起来像
java -cp <path to classes>;<path to libs> mycompany.Test
你应该真正关注ANT来自动编译和构建executable .jar file。由于所有重复的输入和错误的机会,没有人手工完成这些繁琐的东西。创建ANT是为了避免所有这些细节,让您专注于解决编码问题,而不是在使用命令行工具。阅读this。
答案 3 :(得分:0)
尝试编译:
mkdir classes
javac -d classes *.java
仅在第一次创建/ classes目录。 -d目录告诉javac将.class文件放在/ classes下。
要运行,请执行以下操作:
java -cp .;classes MyCompany.Test
这应该可以正常工作。