如何运行位于不属于 cmd 包的子文件夹的 .class 文件?
Posted
技术标签:
【中文标题】如何运行位于不属于 cmd 包的子文件夹的 .class 文件?【英文标题】:How can I run a .class file that is located in a subfolder which is not part of a package from cmd? 【发布时间】:2021-12-09 01:27:32 【问题描述】:我在 helloworld 包中有 HelloWorld 程序:
package helloworld;
public class HelloWorld
public static void main(String[] args)
System.out.println("Hello World");
我把这个HelloWorld.java文件放在helloworld包文件夹中,该文件夹在myapp文件夹中,如下:
C:\test\myapp>dir
Volume in drive C has no label.
Volume Serial Number is F48A-3578
Directory of C:\test\myapp
10/22/2021 07:28 PM <DIR> .
10/22/2021 07:28 PM <DIR> ..
10/22/2021 07:28 PM <DIR> helloworld
0 File(s) 0 bytes
3 Dir(s) 12,348,715,008 bytes free
C:\test\myapp>cd helloworld
C:\test\myapp\helloworld>dir
Volume in drive C has no label.
Volume Serial Number is F48A-3578
Directory of C:\test\myapp\helloworld
10/22/2021 07:28 PM <DIR> .
10/22/2021 07:28 PM <DIR> ..
10/22/2021 07:16 PM 436 HelloWorld.class
10/22/2021 07:14 PM 148 HelloWorld.java
2 File(s) 584 bytes
2 Dir(s) 12,348,715,008 bytes free
C:\test\myapp\helloworld>
在 CMD (Windows) 中,我位于 myapp 文件夹上方的文件夹中,因此,我可以将其编译为:
C:\test>javac myapp\helloworld\HelloWorld.java
C:\test>
但是,当我尝试如下运行它时,它失败了。
C:\test>java myapp\helloworld.HelloWorld
Error: Could not find or load main class myapp\helloworld.HelloWorld
Caused by: java.lang.NoClassDefFoundError: helloworld/HelloWorld (wrong name: myapp\helloworld/HelloWorld)
当然,如果我进入 myapp 文件夹,如下所示,我可以运行它。
C:\test>cd myapp
C:\test\myapp>java helloworld.HelloWorld
Hello World
C:\test\myapp>
我的问题是如何运行位于不属于包的子文件夹中的类文件?
【问题讨论】:
【参考方案1】:您需要使用 java 命令提及类路径。请参考这个链接,它解释了类路径需要被引用的方式
https://docs.oracle.com/javase/7/docs/technotes/tools/windows/classpath.html
所以可能的命令应该是这样的
java -classpath C:\test\myapp helloworld.HelloWorld
【讨论】:
应该是-classpath C:\test\myapp 啊,是的,我错过了,谢谢@GreenPt【参考方案2】:当你运行 java.exe 时,默认情况下类路径只是当前文件夹。
当您在父文件夹中时,您需要显式添加类路径
java -cp myapp helloworld.HelloWorld
【讨论】:
以上是关于如何运行位于不属于 cmd 包的子文件夹的 .class 文件?的主要内容,如果未能解决你的问题,请参考以下文章