如何编译我的Java源文件?

时间:2010-02-22 20:18:49

标签: java compiler-construction packages javac

我的源文件位于此文件夹中: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:
  java.net.URLClassLoader $ 1.run(未知来源)

中的mycompany.test

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

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 个答案:

答案 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

这应该可以正常工作。