为什么 javac 在同一个包中找不到我的 class 文件?
Why does javac not find my class file in the same package?
我正在尝试了解 Java 个包。
我在同一个包中有两个 class,A.java 和 B.java。
Class A 引用 class B.
两者都有封装语句package world.example;
并保存在目录.../world/example/
.
B 编译正常,但是当尝试编译 A 时,javac 找不到 B 的 class 文件。
我尝试了 运行 来自 /world
和 /example
父级的 javac。我在这里和其他地方搜索了很多答案,但无济于事。大多数关于类似主题的问题似乎都有很多无关的代码和信息,所以我试图将我的问题提炼成最基本的内容,但仍然看不出我遗漏了什么。
附录:如果我删除包语句,如果我在编译 A 时指定 class 路径,那么两个 classes 都可以编译,因此: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
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 << 您希望 packages/classes 目录所在的位置。
编译后,您将在您之前选择的 Target_Location 上获得 class 文件。因此,现在您必须将 classpath 环境变量更改为该目标位置,因为您提供了第三方包。
执行看看。
如何在 CMD 中设置 class路径。
set classpath = c:\blah\blah;
我正在尝试了解 Java 个包。
我在同一个包中有两个 class,A.java 和 B.java。 Class A 引用 class B.
两者都有封装语句package world.example;
并保存在目录.../world/example/
.
B 编译正常,但是当尝试编译 A 时,javac 找不到 B 的 class 文件。
我尝试了 运行 来自 /world
和 /example
父级的 javac。我在这里和其他地方搜索了很多答案,但无济于事。大多数关于类似主题的问题似乎都有很多无关的代码和信息,所以我试图将我的问题提炼成最基本的内容,但仍然看不出我遗漏了什么。
附录:如果我删除包语句,如果我在编译 A 时指定 class 路径,那么两个 classes 都可以编译,因此: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
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 << 您希望 packages/classes 目录所在的位置。
编译后,您将在您之前选择的 Target_Location 上获得 class 文件。因此,现在您必须将 classpath 环境变量更改为该目标位置,因为您提供了第三方包。
执行看看。
如何在 CMD 中设置 class路径。
set classpath = c:\blah\blah;