英文:
Compiler couldn't read imported class
问题
我一直在尝试通过手动创建包,在CMD中进行编译。我尝试了以下命令:
javac -d . Nameinfo.java
javac -d . Returndata.java
其中,Nameinfo 包含了计算部分,Returndata 包含了主函数。这些命令都能正常工作。现在,我在我的 "java 程序" 文件夹中创建了两个不同的包,即 packx 和 packy。packx 包含了 Nameinfo,packy 包含了 Returndata。但是,当我尝试编译这两个包时,Nameinfo.java 能够成功编译,但是 Returndata.java 无法读取/识别在 Returndata.java 中导入的 Nameinfo。
错误信息如下:
E:\java programmes>cd packx
E:\java programmes>cd packx
E:\java programmes\packx>javac Nameinfo.java
E:\java programmes\packx>cd..
E:\java programmes>cd packy
E:\java programmes\packy>javac Returndata.java
Returndata.java:2: error: package packx does not exist
import packx.Nameinfo;
^
Returndata.java:7: error: cannot find symbol
Nameinfo data = new Nameinfo();
^
symbol: class Nameinfo
location: class Returndata
Returndata.java:7: error: cannot find symbol
Nameinfo data = new Nameinfo();
^
symbol: class Nameinfo
location: class Returndata
3 errors
英文:
I have been trying to compile through CMD by creating packages manually. I tried the command javac -d . Nameinfo.java and javac -d . Returndata.java, where Nameinfo contains the calculations and Returndata contains main function, and this command worked absolutely fine. Now I made 2 different packages in my "java programmes" folder i.e packx and packy, where packx contains Nameinfo and packy contains Returndata. Now, when I compile these two, Nameinfo.java got compiled but Returndata could not read/recognize the imported Nameinfo in Returndata.java.
errors:
E:\java programmes>cd packx
E:\java programmes>cd packx
E:\java programmes\packx>javac Nameinfo.java
E:\java programmes\packx>cd..
E:\java programmes>cd packy
E:\java programmes\packy>javac Returndata.java
Returndata.java:2: error: package packx does not exist
import packx.Nameinfo;
^
Returndata.java:7: error: cannot find symbol
Nameinfo data = new Nameinfo();
^
symbol: class Nameinfo
location: class Returndata
Returndata.java:7: error: cannot find symbol
Nameinfo data = new Nameinfo();
^
symbol: class Nameinfo
location: class Returndata
3 errors
答案1
得分: 0
如果 Java 或者 javac 需要使用 packx.Returndata 作为一种类型来执行某些操作,它会在类路径和/或源路径中搜索名为 packx 的目录,在该目录中搜索 Returndata.java 或者 Returndata.class,具体取决于工具和路径。
所以,假设你位于 E:\java programmes\packy 目录,并且正在编译一些导入了 packx 的代码。因此,javac 会在类路径中查找 packx/Returndata.class,在源路径中查找 packx/Returndata.java,但是它找不到你想要的内容,因为 E:\java programmes 不在源路径中;通常它们默认为 .(即当前目录)。
在整个过程中,都保持在 E:\java programmes 文件夹中进行操作:
E:
cd "Java programmes"
javac packx/Nameinfo.java
javac packy/Returndata.java
或者更好的做法是意识到手动编译多包 Java 应用程序是不明智的。使用 maven、gradle 或其他能够为你处理所有这些问题的构建工具吧 ![]()
英文:
if java or javac needs, say, packx.Returndata as a type to do something, it will scour a classpath and/or sourcepath for a directory named packx, and within that, Returndata.java or Returndata.class depending on the tool and path we're talking about.
So, you're in E:\java programmes\packy, and you're compiling some code that imports packx. Therefore, javac will look in the classpath for packx/Returndata.class and in the sourcepath for packx/Returndata.java and it doesn't find what you want because E:\java programmes isn't on the source path; generally they default to . (i.e. the current directory).
Stay in the E:\java programmes folder for all this work:
E:
cd "\Java programmes"
javac packx/Nameinfo.java
javac packy/Returndata.java
Or better yet, realize that manually compiling a multipackage java application is crazy. Use maven, gradle or some other build tool that takes care of all this for you ![]()
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。


评论