Ошибка javac "не может найти символ" с командной строкой
У меня есть два класса Owning and OwningAccessor. Файлы находятся в одном каталоге.
public class Owning {
String _name = "";
public void printBanner()
{
}
public void printOwning(double amount)
{
printBanner();
//print details
System.out.println("name:" + _name);
System.out.println("amount:" + amount);
}
}
public class OwningAccessor {
public void access()
{
Owning o = new Owning();
o.printOwning(500);
}
}
Когда я попытался скомпилировать OwningAccessor
с javac -cp . OwningAccessor.java
, я получил ошибку компиляции.
symbol : class Owning
location: class smcho.OwningAccessor
Owning o = new Owning();
^
OwningAccessor.java:6: cannot find symbol
symbol : class Owning
location: class smcho.OwningAccessor
Owning o = new Owning();
^
Что случилось с этим? Код компилируется под Eclipse IDE.
Ответы
Ответ 1
Хорошо, пусть у вас есть код, распространяемый в файлах следующим образом
myproject
├── out
└── src
├── OwningAccessor.java
└── Owning.java
Перейдите в командную строку и смените каталог на myproject
. Выпустив следующую команду:
javac -d out -sourcepath src src/OwningAccessor.java
Я только что протестировал его, и он работает отлично. Скомпилированные классы будут расположены в папке out
:
.
├── out
│ ├── OwningAccessor.class
│ └── Owning.class
└── src
├── OwningAccessor.java
└── Owning.java
Компиляция одного класса вызовет компиляцию всех других зависимых классов. Компилятор автоматически ищет их в папке src
.
Ответ 2
Убедитесь, что вы скомпилируете как Owning.java, так и OwningAccessor.java, например:
javac -cp . Owning.java OwningAccessor.java
Eclipse собирает для вас все необходимые файлы, поэтому работает там.
Ответ 3
Попробуйте сделать правильный пример пути источника:
javac -d temp -sourcepath c:\awork\JavaProjects\singleton\src\ c:\JavaProjects\singleton\src\com\company\MySingleton.java
javac -d temp -sourcepath c:\awork\JavaProjects\singleton\src\ c:\JavaProjects\singleton\src\com\company\Main.java
В "temp" мы выделяем ресурсы и -sourcepath указывают, где находятся .java файлы.