Подтвердить что ты не робот

Ошибка 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.

4b9b3361

Ответ 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 файлы.