首页 > 解决方案 > 无法在java中导入子包

问题描述

有人可以帮我解决这个问题吗?:

我无法导入子包,当我尝试 javac Pixel.java得到:

Pixel.java:2:错误:包 image.color 不存在。

我也试过import image.*import image.color.*;

像素.java:

package image;

import image.color.GrayColor;

public class Pixel{
}

GrayColor.java:

package image.color;

public class GrayColor{
}

我的树:
└── image
├── Pixel.java
├── color
   ├── GrayColor.class
   └── GrayColor.java

标签: java

解决方案


最有可能的是,您不是Pixel.java从项目的根目录编译,而是从该文件所在的目录中编译它(image/)。在这种情况下,与您的包声明匹配的目录结构image/color无法从 获得image/,因为您没有image/image/color.

包声明必须与声明它们的目录结构相匹配,相对于根目录,因为它们是相对于项目的根目录查找的。例如,如果您正在编译,A.javaB.java在 下定义了一个依赖项(A 导入 B)package a.b;,那么B.java将在相应a/b/的文件夹a/b/查找它找不到包/目录a/b/

使用时有两种方法可以解决此问题javac

  • 最好是从根目录编译你的文件。这样,所有包声明都将与根目录相对的目录结构(假设您的包名称正确并且它们与目录名称匹配)匹配;
  • 您可以使用-cpflag 告诉 Java 编译器在哪里寻找其他来源,以防您不是从项目的根目录编译文件。请注意,在这里,您也应该提供项目根目录的路径,因为当从项目的根目录查找时,类包只会匹配文件夹结构。

推荐阅读