java命令运行class文件提示“错误:找不到或无法加载主类“

本文详细解释了Java编译中CLASSPATH的配置,包括不写包名的执行方式、指定编码、使用-d选项生成class文件、引入jar包的方法,以及如何处理Linux和Windows系统中的路径问题。
摘要由CSDN通过智能技术生成

CLASSPATH 配置  .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar;

一句话 不写包名就是直接 编译文件然后执行
#不写包名 编辑器会报错 但是不影响编译和执行   -encoding 指定编码
javac Test.java
javac -encoding  UTF-8 Test.java
java Test
写了包名就必须先编译文件 然后在包的最外层如src带着包名点文件名执行
# 例如 java文件目录为  D:\DEV\src\Test\com\by\lc\Test.java
# 编译的class文件为     D:\DEV\Test\src\com\by\lc\Test.class
# 那么执行文件需要在   D:\DEV\Test\src 目录下 
java com.by.lc.Test

#  -d .    选项 会在当前目录生成包含包名的class文件  
#  也就是会生成下层目录 如 com/by.lc/Test.class, 调用的时候使用包名 点文件名
javac  -d . Test.java
java  com.by.lc.Test

# 在out目录生成class文件 必须是存在的文件夹
# 运行时也要指定路径  
mkdir out
javac -d ./out ./*.java
java -cp ./out com.by.lc.Test


# 引入jar包的情况 . 表示搜索当前目录下   写了引包再写 ./out 执行 会找不到包
# 可以将 out 连接到引包的 后面  应该是class文件被 . 扫描和引入了

# windows 多个文件  引入jar包  生成文件夹
# *.java 可以是多目录  如 ./test1 ./test2 
javac -cp .;DmJdbcDriver18.jar;commons-io-2.5.jar -d ./out  -encoding UTF-8 *.java && java -cp .;DmJdbcDriver18.jar;commons-io-2.5.jar;out com.by.lc.URLToFile

# Linux 多个文件  引入jar包  生成文件夹 
javac -cp .:DmJdbcDriver18.jar:commons-io-2.5.jar -d ./out  -encoding UTF-8 *.java && java -cp .:DmJdbcDriver18.jar:commons-io-2.5.jar:out com.by.lc.URLToFile

如果需要依赖jar的话,需要按照如下格式 编译和执行都需要引入jar

windows下,对于需要依赖的jar包使用-cp ,多个jar包之间使用分号;java命令运行时注意.;
#删除包名只是显示错误 不影响编译和执行 所以可以删掉  在同一目录运行
#jar 与java文件在同一目录可以省略前面路径  方便复制使用
javac -cp .;DmJdbcDriver18.jar;httpclient.jar -encoding UTF-8 DownloadFile.java  &&  java -cp  .;DmJdbcDriver18.jar;httpclient.jar  DownloadFile
Linux下,对于需要依赖的jar包使用-cp ,多个jar包之间使用冒号:java命令运行时注意.:
javac -cp .:DmJdbcDriver18.jar:httpclient.jar -encoding UTF-8 DownloadFile.java  &&  java -cp  .:DmJdbcDriver18.jar:httpclient.jar  DownloadFile

上面看完了没,别看了 那都没用 下面这个一把梭了 

目录结构如下  

Test2
├── libs
│   ├── DmJdbcDriver18.jar
│   ├── commons-io-2.5.jar
│   └── sunjce_provider.jar
├── src
│   ├── TxtToMap.java
│   └── URLToFile.java
└── setting.txt

就看这一行就够了

可以指定jar目录 java文件目录 但是不要再指定输出目录了 就生成在当前目录

结构和包名一致  所以直接 java命令调用【包名.类名】

javac -encoding UTF-8  -Djava.ext.dirs=./libs -d .    ./src/*.java &&  java -Djava.ext.dirs=./libs   com.by.lc.URLToFile
Test2
├── com
│   └── by
│       └── lc
│           ├── TxtToMap.class
│           └── URLToFile.class
├── libs
│   ├── DmJdbcDriver18.jar
│   ├── commons-io-2.5.jar
│   └── sunjce_provider.jar
├── src
│   ├── TxtToMap.java
│   └── URLToFile.java
├── log.txt
└── setting.txt

结果如下    全白折腾了  不区分Linux和Windows 已测试


javac 编译引用外部指定jar包进行编译和执行编译后的class文件

  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值