How to compile java package structures using javac

时光毁灭记忆、已成空白 提交于 2019-11-28 07:37:39

Are you sure importpackage/subpackage is in your classpath?

-cp path or -classpath path

Specify where to find user class files, and (optionally) annotation processors and source files. This class path overrides the user class path in the CLASSPATH environment variable. If neither CLASSPATH, -cp nor -classpath is specified, the user class path consists of the current directory. See Setting the Class Path for more details.

If the -sourcepath option is not specified, the user class path is also searched for source files.

If the -processorpath option is not specified, the class path is also searched for annotation processors.

http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javac.html

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.

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.

(1)first compile the code

javac -d importpackage.subpackage.HelloWorld

(2) and then compile the CallPackage.java

javac CallPackage.java

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!