如何运行位于不属于 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 文件?的主要内容,如果未能解决你的问题,请参考以下文章

从 cmd 运行 cl.exe

带有包的java程序怎么在cmd中运行?

如何让bat,cmd文件后台运行?

用记事本写的c程序,怎么在cmd下编译生成.exe可执行文件

从 npm 包的子文件夹导入

如何在 Python 中运行 Google Cloud Function 中的子进程