2013-10-09 3 views
1

У меня есть эти программы в Java:Compile пакет с 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 

Что такое право команды для компиляции (а затем запустить ту) эту программу?

+0

Ваши команды в порядке, но в исходном коде нигде не упоминается, что Земля com.scjaexam.tutorial.planets.Earth – Ingo

ответ

1

Вы пытаетесь создать экземпляр объекта Земли, однако это находится в отдельном пакете, что означает, что он не может его найти. Вы должны импортировать класс Земли в вашем GreetingsUniverse классе с использованием:

import com.scjaexam.tutorial.planets.Earth; 
+0

Так что, находясь в «подпакете», это то же самое, что и в другом пакете? – Red

+0

Да. Подпакеты используются только для организации классов. – Troubleshoot

2

Вы не импортировали класс Earth, поэтому компилятор не знает, что означает Earth. Вы должны иметь эту строку в начале файла GreeingsUniverse.java:

import com.scjaexam.tutorial.planets.Earth; 
+1

Так быть в «subpackage» - это то же самое, что и в другой упаковке? – Red

+1

@Red В Java нет такой вещи, как subpackage. Просто случается, что ваши два имени пакета имеют общий префикс. –

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", он имеет в виду класс, который вы не импортировать. Обязательно включите все пакеты, которые вы используете в своем классе, перед объявлением класса.