How to compile java package structures using javac

Same situation to me. And I came to take over it by compiling classes at the same time.
For example, here is my project:

+ beerV1
   -> classes
   -> src
         -> com
              -> example
                   -> model
                        -> BeerExpert.java
                   -> web
                        -> BeerSelect.java


BeerExpert.java:

package com.example.model;
import ...

public class BeerExpert{
    ...
}


BeerSelect.java:

package com.example.web;
import com.example.model.*;
import ...

public class BeerSelect {
      ...
}


As you can see: BeerSelect.java is trying to import classes in com.example.model package.
At the first time, I compiled BeerExert.java first by command:

--> javac -d classes src/com/example/model/BeerExpert.java

Then:
--> javac -d classes src/com/example/web/BeerSelect.java

And the result was:
-->... error: package com.example.model does not exist

So, I knew that compiling multiple classes separately will not work in this case.


After suffering on google, I found this very simple way to solve the problem:
Just compile all at once:

--> javac -d classes src/com/example/model/BeerExpert.java src/com/example/web/BeerSelect.java 


Finally, here is what I got:

 + beerV1
           -> classes
                 -> com
                      -> example
                           -> model
                                -> BeerExpert.class
                           -> web
                                -> BeerSelect.class
           -> src
                 -> com
                      -> example
                           -> model
                                -> BeerExpert.java
                           -> web
                                -> BeerSelect.java

Hope that helps.


The issue was that the class path needs to be set for each command (javac and java):

Attempted Steps

  1. instead of going to subpackage, compile HelloWorld.java from the top_level:

    $javac -cp . importpackage/subpackage/HelloWorld.java

  2. compile CallPackage.java in the same way:

    $javac -cp . CallPackage.java

  3. run the file using the class path also:

    $java -cp . CallPackage

NOTE: running "$java CallPackage" will give an error "Error: Could not find or load main class CallPackage"

In summary, during each step, the class path must be specified. It worked after running it as such.