英文:
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
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论