用java编译包

时间:2013-10-09 13:58:23

标签: java compilation javac

我在java中有这些程序:

//file ../src/com/scjaexam/tutorial/GreetingsUniverse.java
package com.scjaexam.tutorial;
public class GreetingsUniverse {
    public static void main(String[] args) {
        System.out.println("Greetings, Universe!");
        Earth e = new Earth();
    }
}

//file ../src/com/scjaexam/tutorial/planets/Earth.java
package com.scjaexam.tutorial.planets;    
public class Earth {
    public Earth() {
        System.out.println("Hello from Earth!");
    }
}

我可以使用以下方法编译第二个没有错误:

javac -d classes src/com/scjaexam/tutorial/planets/Earth.java

这会将编译后的文件Earth.class按预期放入../classes/com/scjaexam/tutorial/planets/文件夹中。现在我必须编译主类GreetingsUniverse.java,但是这个命令失败了:

javac -d classes -cp classes src/com/scjaexam/tutorial/GreetingsUniverse.java

src/com/scjaexam/tutorial/GreetingsUniverse.java:7: error: cannot find symbol
        Earth e = new Earth();
        ^
  symbol:   class Earth
  location: class GreetingsUniverse
src/com/scjaexam/tutorial/GreetingsUniverse.java:7: error: cannot find symbol
        Earth e = new Earth();
                      ^
  symbol:   class Earth
  location: class GreetingsUniverse

编译(然后运行)这个程序的正确命令是什么?

3 个答案:

答案 0 :(得分:2)

您尚未导入Earth类,因此编译器不知道Earth引用的内容。您应该在GreeingsUniverse.java文件的开头添加此行:

import com.scjaexam.tutorial.planets.Earth;

答案 1 :(得分:1)

您需要导入Earth

package com.scjaexam.tutorial;

import com.scjaexam.tutorial.planets.Earth;

public class GreetingsUniverse {
    public static void main(String[] args) {
        System.out.println("Greetings, Universe!");
        Earth e = new Earth();
    }
}

当编译器说"cannot find symbol: class Earth"时,它指的是你没有导入的类。请确保在课堂声明之前包括您在课堂上使用的所有课程。

答案 2 :(得分:1)

您正在尝试创建一个Earth对象的实例,但是这是一个单独的包,这意味着它无法找到它。您需要使用以下命令在GreetingsUniverse类中导入Earth类:

import com.scjaexam.tutorial.planets.Earth;