为什么这不编译?

时间:2010-06-22 07:58:56

标签: java compilation

我有这些文件:

c:\MY_SOURCES\AClient.java
c:\MY_SOURCES\Pluto.java
c:\MY_SOURCES\com\Classes\Pluto.class

进入AClient.java我有

import com.Classes.*;
Pluto p = new Pluto();

当我使用:

编译文件时
javac -classpath . AClient.java

编译器告诉我它无法访问Pluto作为错误的源文件Pluto.java ...但如果我将Pluto.java移离c:\MY_SOURCES则会编译。

3 个答案:

答案 0 :(得分:2)

您的源文件夹应该镜像您的包结构。如果它没有javac混淆。理想情况下,您编译的.class文件夹应与源文件夹位于不同的根目录中。

所以

c:\MY_SOURCES\AClient.java (assuming in the default package)
c:\MY_SOURCES\com\Classes\Pluto.java

c:\MY_COMPILED\com\Classes\Pluto.class

javac -classpath=c:\MY_COMPILED -d 
c:\MY_COMPILED\ c:\MY_SOURCES\AClient.java

答案 1 :(得分:1)

重申......

C:\MY_SOURCES\AClient.java
C:\MY_SOURCES\com\Classes\Pluto.java

假设AClient.java包含...

import com.Classes.*;

public class AClient {
   Pluto p = new Pluto();
}

此编辑确实有效

C:\MY_SOURCES\javac *.java

答案 2 :(得分:0)

也许您在Pluto文件中引入了错误。当你尝试编译AClient时,它也会尝试编译Pluto(因为它被AClient使用)并且会遇到错误。如果你删除了Pluto.java,你可以从之前的(成功的)编译获得类文件,并且它使用它,并且它可以工作。您应该检查Pluto.java并查看它是否自行编译,或者是否存在任何其他问题。