6
votes

I have two java files (A.java + B.java) in src/com/example

A.java

package com.example;

public class A {
    public void sayHello(){
        System.out.println("Hello");
    }
}

B.java

package com.example;

public class B{
    public static void main(String... args) {
        A a = new A();
        a.sayHello();
    }
}

If I cd to one level above src and type javac -d classes src/com/example/B.java

I get an error saying cannot find symbol A?

3

3 Answers

5
votes

javac doesn't know where to find source class you have to specify it with -sourcepath option.

See:

C:\example>mkdir src
C:\example>type > src/
C:\example>mkdir src\com\example
C:\example>more > src\com\example\A.java
package com.example;
public class A {
}
^C
C:\example>more > src\com\example\B.java
package com.example;
public class B {
    A a;
}
^C
C:\example>javac -d
C:\example>mkdir classes
C:\example>javac -d classes src\com\example\B.java
src\com\example\B.java:3: cannot find symbol
symbol  : class A
location: class com.example.B
        A a;
        ^
1 error
C:\example>javac -d classes -sourcepath src src\com\example\B.java
C:\example>
1
votes

That's because Java doesn't know where to find the source of the other file. You need to either cd into the src directory, or specify the src directory on the -sourcepath.

0
votes

Try javac -d classes src/com/example/*.java