#java #javac
#java #javac
Вопрос:
Я выполняю упражнение 1.2 подготовки к экзамену Oracle Java SE 8, в котором мне предлагается создать основной класс GreetingsUniverse
и три класса, которые будут инициализированы основным классом; Mars
, Earth
и Venus
.
У меня есть com
каталог, хранящийся по адресу location: C:UsersChrisDocumentsJavaMM
package com.ocajexam.tutorial;
import com.ocajexam.tutorial.planets.Earth;
import com.ocajexam.tutorial.planets.Venus;
import com.ocajexam.tutorial.planets.Mars;
public class GreetingsUniverse
{
public static void main (String[] args)
{
System.out.println("Greetings, Universe!");
Earth e = new Earth();
Mars m = new Mars();
Venus v = new Venus();
}
}
package com.ocajexam.tutorial.planets;
public class Mars
{
public Mars()
{
System.out.println("Hello from Mars!");
}
}
package com.ocajexam.tutorial.planets;
public class Earth
{
public Earth()
{
System.out.println("Hello from Earth!");
}
}
package com.ocajexam.tutorial.planets;
public class Venus
{
public Venus()
{
System.out.println("Hello from Venus!");
}
}
Цель упражнения — определить аргументы командной строки, необходимые для компиляции кода.
У меня есть файл GreetingsUniverse
Java, хранящийся в comocajexamtutorial
и хранилище planets в comocajexamtutorialplanets
Я пробовал различные решения, но безуспешно:
javac -d . -cp comocajexamtutorialplanets comocajexamtutorialGreetingsUniverse.java
javac -d . -cp com comocajexamtutorialGreetingsUniverse.java
Я продолжаю получать следующую ошибку:
C:UsersChrisDocumentsJavaMM>javac -d . -cp com comocajexamtutorialGreetingsUniverse.java
comocajexamtutorialGreetingsUniverse.java:8: error: cannot find symbol
Earth e = new Earth();
^
symbol: class Earth
location: class GreetingsUniverse
comocajexamtutorialGreetingsUniverse.java:8: error: cannot find symbol
Earth e = new Earth();
^
symbol: class Earth
location: class GreetingsUniverse
comocajexamtutorialGreetingsUniverse.java:9: error: cannot find symbol
Mars m = new Mars();
^
symbol: class Mars
location: class GreetingsUniverse
comocajexamtutorialGreetingsUniverse.java:9: error: cannot find symbol
Mars m = new Mars();
^
symbol: class Mars
location: class GreetingsUniverse
comocajexamtutorialGreetingsUniverse.java:10: error: cannot find symbol
Venus v = new Venus();
^
symbol: class Venus
location: class GreetingsUniverse
comocajexamtutorialGreetingsUniverse.java:10: error: cannot find symbol
Venus v = new Venus();
^
symbol: class Venus
location: class GreetingsUniverse
6 errors
Кто-нибудь знает, где я ошибаюсь в этом?
Я также попробовал следующее, которое выдает другое сообщение об ошибке:
C:UsersChrisDocumentsJavaMM>javac -d . comocajexamtutorialplanetsEarth.java;comocajexamtutorialplanetsMars.java;comocajexamtutorialplanetsVenus.java comocajexamtutorialGreetingsUniverse.java
Выдает эту ошибку:
javac: file not found: comocajexamtutorialplanetsEarth.java;comocajexamtutorialplanetsMars.java;comocajexamtutorialplanetsVenus.java
Usage: javac <options> <source files>
use -help for a list of possible options
Файлы определенно есть, если я укажу каталог в planets
каталоге, я смогу увидеть их там:
Directory of C:UsersChrisDocumentsJavaMMcomocajexamtutorialplanets
16/10/2016 11:33 <DIR> .
16/10/2016 11:33 <DIR> ..
15/10/2016 21:48 135 Earth.java
15/10/2016 21:48 132 Mars.java
15/10/2016 21:48 135 Venus.java
Обновить:
После дальнейшей отладки это становится все более странным..
Я пытаюсь скомпилировать только файлы planet, используя первую половину команды:
javac -d . -cp comocajexamtutorialplanets*.java
Когда я проверяю каталог planet, только две планеты скомпилированы. Когда я удаляю класс Java, который не компилируется, компилируется только 1 файл!
Когда я использую ту же команду, указывающую java-файл, который я хочу скомпилировать:
javac -d . -cp comocajexamtutorialplanetsVenus.java
Я получаю следующую ошибку:
javac: no source files
Usage: javac <options> <source files>
use -help for a list of possible options
Я не могу понять это, потому Venus.java
что это был один из файлов, которые компилировались, когда я запускал команду /*.java
компиляции для обнаружения любых файлов Java в каталоге
Комментарии:
1. Ваш путь к классу
.
, нетcom
.2. Я также пробовал это и получаю ту же ошибку
3.
Venus.java
например, должен быть его собственный файл. Форматирование вашего вопроса не делает это очень понятным4. Какую ОС вы используете? Я попробовал свою команду ниже как в Windows, так и в Ubuntu, чтобы убедиться, что она будет работать. Если возможно, не могли бы вы выполнить cd com ocajexam tutorial planets, а затем запустить ls или dir, чтобы получить содержимое каталога и опубликовать их здесь?
5. Я использую Windows 10 Home. Я
dir
проверил каталог, в котором находятся файлы planet:Directory of C:UsersChrisDocumentsJavaMMcomocajexamtutorialplanets
и он показываетEarth.class
,Earth.java
,Mars.class
,Mars.java
,Venus.class
иVenus.java
Ответ №1:
Сначала вам нужно скомпилировать все классы. Javac компилирует только ваш основной класс. Используйте javac -cp /path/to/file/*.java
. Звездочка ( *.java
) означает компиляцию всех классов Java в папке.
Комментарии:
1. Это нормально компилирует эти файлы, но я все равно получаю ту же ошибку при попытке скомпилировать основной класс
2. Вам не нужно вручную компилировать каждый класс, если он находится в пути к классу. Компилятор достаточно умен, чтобы автоматически включать другие классы.
3. Тогда я не понимаю, почему он выдает ошибку, в которой говорится, что он не может их найти
Ответ №2:
В примере из учебного пособия OCA Java SE 8 Programmer I для программистов используется конструктор без круглых скобок.
package com.ocajexam.tutorial.planets;
public class Earth {
public Earth {
System.out.println("Hello from Earth!");
}
}
это, конечно, должно быть
package com.ocajexam.tutorial.planets;
public class Earth {
public Earth () {
System.out.println("Hello from Earth!");
}
}
Затем вы можете запустить javac com/ocajexam/tutorial/greetingsUniverse.java
и java com/ocajexam/tutorial/GreetingsUniverse
.
Хотя, строго говоря, это не ответ на вопрос (в котором используются конструкторы со скобками), это может помочь другим людям с той же ошибкой.
Ответ №3:
Все используемые файлы .java должны находиться в classpath. ie javac -d . -cp com comocajexamtutorial*.java comocajexamtutorialplanets*.java
Попробуйте выполнить: javac -d . -cp com com/ocajexam/tutorial/GreetingsUniverse.java com/ocajexam/tutorial/planets/Earth.java com/ocajexam/tutorial/planets/Mars.java com/ocajexam/tutorial/planets/Venus.java
Комментарии:
1. Я пробовал это и все еще получаю ту же ошибку
2. У вас вообще не может быть исходных файлов в пути к классам, а расположение файлов классов НЕ должно включать часть пути к пакету, потому что это добавляется автоматически.
3. За: docs.oracle.com/javase/7/docs/technotes/tools/windows/javac.html Если параметр -sourcepath не указан, поиск исходных файлов также выполняется в пути к пользовательскому классу.