如何编译位于不同包中的依赖 .java 文件

How to compile dependent .java files located in different packages

我有一个名为pack的文件夹,里面有两个文件夹p1和p2。

在文件夹 p1 中,我在名为 sum.java

的文件中编写了以下代码
package pack.p1;
public class sum{
public static void Display_Sum(int a,int b){
System.out.println("Sum = "+(a+b));
}
}

然后在文件夹 p2 中,我在名为 wap8.java

的文件中写入以下代码
package pack.p2;
import pack.p1.sum;
import java.util.Scanner;
class wap8{
public static void main(String args[]){
Scanner s=new Scanner(System.in);
System.out.println("Enter two no.s = ");
int a=s.nextInt();
int b=s.nextInt();
sum.Display_Sum(a,b);

}
}

这是我在命令提示符下的执行流程。 首先,我通过执行

创建 sum.java 的 class 文件

H:\Java\WAP 4\pack\p1>javac sum.java

然后我将求和的class路径设置为

H:\Java\WAP 4\pack\p1>set classpath=%classpath%;h:\Java\WAP 4\pack;

然后在 cmd 行中,我来到文件夹 p2 并执行以下命令,但它显示包 pack.p1 不存在。为什么会这样??

H:\Java\WAP 4\pack\p2>javac wap8.java

wap8.java:2: 错误:包 pack.p1 不存在

导入包。p1.sum;

          ^

wap8.java:10: 错误: 找不到符号

sum.Display_Sum(a,b);

^

符号:变量总和

位置:class wap8

2 个错误

我什至尝试在环境变量中设置 class 路径变量 变量名 作为 CLASSPATH可变值H:\Java\WAP4\pack;.当我执行 javac wap8.java 并显示与上面相同的错误时仍然不工作

你无缘无故地把事情复杂化了。使用以下步骤,您应该会很好。

  1. 导航到 H:\Java\WAP 4\pack\p1 目录。
  2. javac sum.java
  3. 导航到 H:\Java\WAP 4\ 目录。
  4. javac pack\p2\wap8.java

就是这样。无需明确设置 CLASSPATH。您必须从 WAP 4 文件夹编译 wap8 的原因是因为 class 中的包语句将其绑定到完全限定名称。因此 sum1 的 FQN 为 pack.p1.sum,而 wap8 的 FQN 为 pack.p2.wap8。因此,当您在 pack\p2 文件夹中时,javac 将看不到 pack.p1.sum

您可以使用 java pack.p2.wap8

运行 来自 H:\Java\WAP 4 目录的代码