为什么javac在同一个包中找不到我的类文件?

时间:2017-04-17 22:35:34

标签: java package javac

我正在尝试理解Java包。

我在同一个包中有两个类,A.java和B.java。 A类引用B类。

两者都有包语句package world.example;,并保存在目录.../world/example/中。

B编译正常,但在尝试编译A时,javac无法找到B的类文件。

我尝试从/world的父级以及/example的父级运行javac。我在这里和其他地方都搜索过很多答案,但都无济于事。关于类似主题的大多数问题似乎都有很多无关的代码和信息,所以我试图将我的问题提炼到骨子里,但仍然无法看到我所缺少的内容。

附录:如果删除package语句,只要在编译A时指定类路径,两个类都编译好,因此:javac -classpath . A.java

代码如下:

package world.example;

public class A {    
  public static void main(String[] args) {
    String msg = B.getMessage();
    System.out.println(msg);
  }     
}

...和...

package world.example;

public class B {    
    protected static String getMessage() {
        return "Hello world!";
    }       
}

...和javac的输出......

17-04-17◆23:03 example »javac B.java 
17-04-17◆23:04 example »javac A.java 
A.java:5: error: cannot find symbol
        String msg = B.getMessage();
                     ^
  symbol:   variable B
  location: class A
1 error
17-04-17◆23:04 example »javac -classpath . A.java
A.java:5: error: cannot find symbol
        String msg = B.getMessage();
                     ^
  symbol:   variable B
  location: class A
1 error

1 个答案:

答案 0 :(得分:0)

I have two classes, A.java and B.java, in the same package. Class A references class B

您必须采用实用的分离方法将.java文件与.class文件分开。

与我重复整个编译过程。

首先,在CMD中编译.java文件时使用此命令,以便将.java文件与.class文件分开,以避免混淆。

javac -d Target_Location Filename.java  >>>> Spaces are important

Target_location = C:\ blah \ blah<<你希望你的包/类目录在哪里。

编译完成后,您将在之前选择的Target_Location上获取您的类文件。因此,现在您必须将类路径环境变量更改为该目标位置,因为您已提供第三方软件包。

执行并查看。

如何在CMD中设置类路径。

set classpath = c:\blah\blah;