今天用记事本写一段Java代码,突然想到如果用记事本写java代码引入一个Jar包该怎么编译和运行呢?直接上手试一下。
即便是纯手写代码也要尽可能的去模拟一下真实的项目结构:
一个简单的小实现:借助hutool工具包完成字符串首字母大写,并输出Hello World!
lib
:存放jar包,hutool-all-5.4.0.jar
// 因为Main.java文件是直接写在src根目录下的所以并未执行package包路径
// 引入hutool工具包
import cn.hutool.core.util.StrUtil;
public class Main {
public static void main(String[] args) {
// 调用hutool的StrUtil,完成对hello World!的首字母大写
System.out.println(StrUtil.upperFirst("hello World!"));
}
}
要求编译后的class
文件输出到classe目录中去。
javac -d classes -cp .\lib\hutool-all-5.4.0.jar .\src\Main.java
说明:
-d: 指定编译后文件的输出路径
-cp: 指定编译文件时(zip or jar包的扫描 路径)
编译成功后:会在classes文件中生成Main的class文件
通常地,在最开始学习用记事本写一段java代码输出Hello World!的时候,只要是编译成功了直接运行(java Main)就能得出结果,但是因为现在引入jar包的原因,直接运行:报错!在运行时找不到对应的class文件,可是明明已经打包成功了?那是因为在运行的时候没有在对应的classpath
中找到hutool的工具包。 所以报错了,如果不报错,就需要找到它(废话文学!)
说到这就不得不扯一扯java.lang.NoClassDefFoundError
和java.lang.ClassNotFoundException
之间的区别了,可这是另外的价钱,想要了解的可自行百度(其实下文附有链接).
java -cp .\lib\hutool-all-5.4.0.jar;classes Main
说明:
-cp:运行时需要扫描的文件路径
这里为什么要加上classes呢?因为class文件在里面,运行的时候需要去里面找Main文件这个程序入口。
注意文件路径:这决定着上面的运行命令怎么写。
D:\java\jdk1.8\jdk1.8.0_65\bin\java.exe "
-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2022.1.1\lib\idea_rt.jar=55592:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2022.1.1\bin"
-Dfile.encoding=UTF-8
-classpath D:\java\jdk1.8\jdk1.8.0_65\jre\lib\charsets.jar;D:\java\jdk1.8\jdk1.8.0_65\jre\lib\deploy.jar;D:\java\jdk1.8\jdk1.8.0_65\jre\lib\ext\access-bridge-64.jar;D:\java\jdk1.8\jdk1.8.0_65\jre\lib\ext\cldrdata.jar;D:\java\jdk1.8\jdk1.8.0_65\jre\lib\ext\dnsns.jar;D:\java\jdk1.8\jdk1.8.0_65\jre\lib\ext\jaccess.jar;D:\java\jdk1.8\jdk1.8.0_65\jre\lib\ext\jfxrt.jar;D:\java\jdk1.8\jdk1.8.0_65\jre\lib\ext\localedata.jar;D:\java\jdk1.8\jdk1.8.0_65\jre\lib\ext\nashorn.jar;D:\java\jdk1.8\jdk1.8.0_65\jre\lib\ext\sunec.jar;D:\java\jdk1.8\jdk1.8.0_65\jre\lib\ext\sunjce_provider.jar;D:\java\jdk1.8\jdk1.8.0_65\jre\lib\ext\sunmscapi.jar;D:\java\jdk1.8\jdk1.8.0_65\jre\lib\ext\sunpkcs11.jar;D:\java\jdk1.8\jdk1.8.0_65\jre\lib\ext\zipfs.jar;D:\java\jdk1.8\jdk1.8.0_65\jre\lib\javaws.jar;D:\java\jdk1.8\jdk1.8.0_65\jre\lib\jce.jar;D:\java\jdk1.8\jdk1.8.0_65\jre\lib\jfr.jar;D:\java\jdk1.8\jdk1.8.0_65\jre\lib\jfxswt.jar;D:\java\jdk1.8\jdk1.8.0_65\jre\lib\jsse.jar;D:\java\jdk1.8\jdk1.8.0_65\jre\lib\management-agent.jar;D:\java\jdk1.8\jdk1.8.0_65\jre\lib\plugin.jar;D:\java\jdk1.8\jdk1.8.0_65\jre\lib\resources.jar;D:\java\jdk1.8\jdk1.8.0_65\jre\lib\rt.jar;D:\WorkHourse\POIDemo\out\production\POIDemo;D:\WorkHourse\POIDemo\lib\poi-4.1.2.jar;D:\WorkHourse\POIDemo\lib\xmlbeans-3.1.0.jar;D:\WorkHourse\POIDemo\lib\poi-ooxml-4.1.2.jar;D:\WorkHourse\POIDemo\lib\hutool-all-5.4.0.jar;D:\WorkHourse\POIDemo\lib\commons-math3-3.6.1.jar;D:\WorkHourse\POIDemo\lib\commons-compress-1.19.jar;D:\WorkHourse\POIDemo\lib\poi-ooxml-schemas-4.1.2.jar;D:\WorkHourse\POIDemo\lib\commons-collections4-4.4.jar com.dongzi.excel.Main
用记事本写的java程序引用jar文件
关于怎么解决java.lang.NoClassDefFoundError错误