Javac "cannot find symbol"
command-line-interface, compilation, java, javac
Solution
First, To compile the java source file using `javac` you need to specify the files to compile explicitly.
Example:
javac PathToSourceFile/FileName.java
you need not provide the `path` if the source file is in the current working directory.
Second, whenever java encounters `import abc.xyz.ClassName;` it tries to resolve `abc/xyz/ClassName` with respect to the `classpath` or current working directory.
So if you are inside the vehicles folder and compile your code, it wont compile because it will look for folder vehicles inside folder vehicles (which doesn't exist!).
but, you can do this when inside the vehicles folder
javac -cp ../ BicycleMain.java
and it should compile, because classpath will be set to the directory(`../`) containing vehicles. which will resolve your `Bicycle` class.
and then use
`java -cp ../ vehicles/BicycleMain` to run.
Problem
I've the root directory like this : ``` ├── classes └── src └── vehicles ├── Bicycle.java └── BicycleMain.java ``` Bicycle.java ``` package vehicles; public class Bicycle { public int cadence; public int gear; public int speed; public Bicycle(int startCadence, int startSpeed, int startGear) { gear = startGear; cadence = startCadence; speed = startSpeed; } public void setCadence(int newValue) { cadence = newValue; } public void setGear(int newValue) { gear = newValue; } public void setSpeed(int newValue) { speed = newValue; } public int getGear() { return gear; } public int getCadence() { return cadence; } public int getSpeed() { return speed; } public void applyBrake(int decrement) { speed -= decrement; } public void speedUp(int increment) { speed += increment; } ``` BicycleMain.java ``` package vehicles; import vehicles.*; public class BicycleMain { public static void main (String args[]){ Bicycle Bike = new Bicycle(10, 20, 1); System.out.println("We have a new bicycle with speed = " +Bike.getSpeed()+", cadence = "+Bike.getCadence()+", gear = "+Bike.getGear()); } } ``` I compiled the Bicycle.java and successful, but not for BicycleMain.java : ``` symbol : class Bicycle location: class vehicles.BicycleMain Bicycle Bike = new Bicycle(10, 20, 1); ^ src/vehicles/BicycleMain.java:6: cannot find symbol symbol : class Bicycle location: class vehicles.BicycleMain Bicycle Bike = new Bicycle(10, 20, 1); ^ 2 errors ``` I try to run these files with Netbeans and IT WORKS! but why it doesn't work when I compile in CLI?