prosseek
prosseek

Reputation: 190809

javac "cannot find symbol" error with command line

I have two classes Owning and OwningAccessor. The files are in the same directory.

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);
    }
}

When I tried to compile OwningAccessor with javac -cp . OwningAccessor.java, I got compilation error.

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();
                   ^

What's wrong with this? The code compiles fine under eclipse IDE.

Upvotes: 12

Views: 50413

Answers (4)

Bhuvnesh Incedo
Bhuvnesh Incedo

Reputation: 31

So, in a directory named D:\Automation there is a file Demo.java throwing this error, in cmd while you are in D:\Automation, you need to : - 1) cd.. //will pull you out from Automation directory. In D:> 2) javac Automation\Demo.java

this will compile your file - Demo.java

Upvotes: 0

luciano
luciano

Reputation: 19

Try to make a correct sourcepath example:

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

In "temp" we alocate resources and with -sourcepath indicate where are the .java files.

Upvotes: 1

Edwin Dalorzo
Edwin Dalorzo

Reputation: 78579

Ok, let's suppose you have the code distributed in files as follows

myproject
├── out
└── src
    ├── OwningAccessor.java
    └── Owning.java

Go to your command prompt, and change directory to myproject. Once there issue the following command:

javac -d out -sourcepath src src/OwningAccessor.java

I just tested it and it works just fine. Your compiled classes will be located in the out folder:

.
├── out
│   ├── OwningAccessor.class
│   └── Owning.class
└── src
    ├── OwningAccessor.java
    └── Owning.java

Compiling one class will trigger the compilation of all other dependent classes. The compiler will automatically look for them in the src folder.

Upvotes: 19

Kninnug
Kninnug

Reputation: 8053

Make sure you compile both Owning.java and OwningAccessor.java, like so:

javac -cp . Owning.java OwningAccessor.java

Eclipse compiles all necessary files for you, which is why does work there.

Upvotes: 14

Related Questions