命令行执行class文件的路径和包问题(代码片段)

coding-one coding-one     2023-03-21     553

关键词:

  在实际开发过程中,我们都是使用集成开发工具,很少使用命令行去执行 java 程序。今天在看书时,编写了书上的例子,照着书上使用命令行来执行(书上可能是为了简便),发现报错说找不到类文件,可是仔细检查类文件路径发现并没有问题。后来才知道原来是 java 命令对 class 文件的包名的强依赖原因造成的。自己重新写一遍,加深印象。

    转自:使用 java 命令运行 class 文件报错找不到文件问题

 

1. 报错详情

   技术图片

 

 

2. java 源文件路径

  D:projectonezaiThinkingJavaDemosrcozs2s11Train10.java

  技术图片

 

3. java 代码

package oz.s2.s11;

public class Train10 
    public static void main(String[] args)
        System.out.println(args[0]);
        System.out.println(args[1]);
        System.out.println(args[2]);
    

 

4. 编译

  进入到源文件的包目录下:D:projectonezaiThinkingJavaDemosrcozs2s11

  编译成功,并生成了 class 文件:

    技术图片

 

 

5. 执行

  技术图片

 

  可以看到,报错了。可是明明 class 文件是存在的呀!

 

6. 分析

  报错的原因就是,java 在加载 class 文件时,发现 class 文件声明的包名是 oz.s2.s11,而上述执行命令并没有指定包名,所以包名不匹配,就报错了。

  正确的做法是,退出到包路径的最外层,然后使用 java oz.s2.s11.Train10 来执行,这个时候,java 会将点分的包名转化成路径,然后查找到 class 文件,而刚好的命令行传递的包名和找到的 class 文件声明的包名一致,这样就对上了,结果:

    技术图片

 

 

7. 细思

  既然我们知道了报错的原因是 命令行传入的包路径和找到的 class 声明的包路径不一致,那么假如我们现在非要在 D:projectonezaiThinkingJavaDemosrcozs2s11 路径下执行 Train10.class 文件,是不是只需要人为地创造一个相同的包路径就可以呢?答案是:是的。例如:

  技术图片

 

   只不过,我们现在执行的 class 文件是这个路径:D:projectonezaiThinkingJavaDemosrcozs2s11ozs2s11

 

  想想路径和包名的微妙关系,其实可以猜想:在前面的报错中 “找不到或无法加载主类”,应该是 “无法加载”,而不是 “找不到”。其实找应该是找到了,只是与找到的 class 文件声明的包名不一致,java 认为这样不合法,所以报错了。

  

go基础:路径文件名和包名的关系(代码片段)

...录,称之为包包可以被其他的包引用main包用来生成可执行文件,每个程序只有一个main包包可以提高代码的可复用性Go包的特征一个文件夹下只能有一个package。import后面的其实是GOPATH开始的相对目录路径,包括最后一... 查看详情

混合编程jni第七篇之jni的命令行们(代码片段)

...sp;  今天将继续JNI的学习,jni编程中常使用的一些命令行工具如何使用事半功倍,今天就快速的过一下,希望在接下来的使用中可以发挥效果    javahjavah是Java提供的生成jni头文件的命令行文件位置C:\\ProgramFi... 查看详情

5-4模块和包(代码片段)

...在的位置必须在sys.path所在的搜索路径中模块可以包含可执行的语句和函数的定义,这些语句的目的是初始化模块,它们只在模块名第一次遇到导入import语句时才执行(import语句是可 查看详情

生成package.json文件报错“系统找不到指定的路径”(代码片段)

...有多少配置是和我们的日常开发相关的?使用npm或yarn命令生成一个最简单的package.json文件。在命令行执行命令:yarninit-y执行命令hadoopversion也会报同样的错二、解决问题打开hadoop环境配置文件hadoop-env.cmd 查看详情

命令行基础(代码片段)

写在前边:简单总结一下常用的命令先了解一点点概念:一绝对路径和相对路径  绝对路径:运用以根目录为参考点的路径描述方式才会被称之为绝对路径(以/开头)  相对路径:不以根目录为参考点的路径描述方式就是... 查看详情

perl的不严谨教程(代码片段)

...哪记录到哪。脚本编译与执行方式1、在linux下使用terminal命令行执行perl代码:特点:交互式,perl-e‘perlcode‘#命令行中执行时-e和单引号不能少。-e是执行代码的命令行参数,命令行参数还包含其他命令2、写成.pl文件后,通过命... 查看详情

从命令行运行 JAR 文件并指定类路径

】从命令行运行JAR文件并指定类路径【英文标题】:RunaJARfilefromthecommandlineandspecifyclasspath【发布时间】:2013-08-2702:32:59【问题描述】:我编译了一个JAR文件并在清单中指定了Main-Class(我使用了EclipseExport函数)。我的依赖项都在... 查看详情

终端打印(代码片段)

...本行,其中#!位于解释器路径之前。/bin/bash是Bash的解释器命令路径。有两种运行脚本的方式。一种是将脚本作为bash的命令行参数,另一种是授予脚本执行权限,将其变为可执行文件。将脚本作为命令行参数时的运行方式如下(#号... 查看详情

环境变量

...java安装根目录,如C:ProgramFilesJavajdk1.8.0_191path:主要用于命令行中使用jdk的命令时,去哪里找命令。比如bin目录路径C:ProgramFilesJavajdk1.8.0_191in,配置后可以直接使用命令的名字,这时系统根据path指定的路径去找到命令执行;若不... 查看详情

wpf和命令行应用程序在同一个可执行文件中(代码片段)

...用程序(默认用例,单击.exe时),或者我可以用来运行命令行任务。这可能吗?如果是这样,我将如何修改我的app.xaml/app.xaml.cs,以便它只打开特定条件的图形视图(例如没有命令行参数)?答案首先,您必须使用WPF应用程序项... 查看详情

mac使用java命令运行java程序(代码片段)

...(String[]args) System.out.println("helloworld!");  2、使用java命令,编译.java文件,生成.class文件  (1)在.java文件所在文件目录下执行:javacTest.java  (2)或者在任意目录下使用-cp<路径>文件名,... 查看详情

linux上定期清空持续输出的日志文件(代码片段)

...第三步中也无需额外参数。为这个脚本赋予执行权限,在命令行执行:chmod+xclear.sh或:chmod777clear.sh设置crond命令,指定定期间隔:crontab-e进入编辑模式后,加入要定期执行的命令,多个命令换行输入即可,如需关停则直接删除相... 查看详情

怎么执行一个自己写的脚本文件

可以在命令行执行脚本文件。以python脚本文件为例,演示在命令行运行脚本文件步骤:1、创建一个简单的python入门代码,以便示范。2、存储文件并复制该python文件的存储路径。3、使用cd命令切换工作目录到python文件所在的目录... 查看详情

2018-04-28一些常用的命令行命令(代码片段)

1、ls命令——显示当前目录下的路径(不包括隐藏文件)该命令对应的单词是list,其中包含以下常用的参数说明:ls-a显示当前目录下的所有文件(包括以.开头的隐藏文件)ls-l显示当前目录下文件的详细信息ls-al显示当前目录下... 查看详情

Spring Boot 从命令行执行将文件添加到类路径

】SpringBoot从命令行执行将文件添加到类路径【英文标题】:SpringBootaddfilestoclasspathfromcommandlineexecution【发布时间】:2017-11-2313:30:00【问题描述】:我正在使用Netbeans8.2开发Spring应用程序。我遇到问题的这个特定应用程序是SpringBoot... 查看详情

python命令行参数以及代码编译发布为可执行文件(代码片段)

Python命令行参数以及代码编译发布为可执行文件1.Python命令行参数1.1Python中也可以所用sys的sys.argv来获取命令行参数1.2Python提供了getopt模块来获取命令行参数。2.Python代码编译发布为可执行文件2.1打包工具Pyinstaller2.2安装Pyinstaller2.... 查看详情

模块和包(代码片段)

...用在导入文件时,文件中所有没有任何缩进的代码都会被执行一遍!__name__属性__name__属性可以做到,测试模块的代码只在测试情况下被运行,而在被导入时不会被执行!__name__是Python的一个内置属性,记录着一个字符串如果是被... 查看详情

如何在命令行启动参数上转义文件路径中的空格(代码片段)

...呢?原因就是仔细观察中间有两个空格。在程序中调用cmd命令打开一个文件ÿ 查看详情