[ Java ] 【返璞归真】记事本方式编写Java文件,引入Jar包编译 & 运行
今天用记事本写一段Java代码,突然想到如果用记事本写java代码引入一个Jar包该怎么编译和运行呢?直接上手试一下。
1、文件目录
即便是纯手写代码也要尽可能的去模拟一下真实的项目结构(非必须):
C:\Users\lslil\WorkSpack\v1>dir
驱动器 C 中的卷没有标签。
卷的序列号是 0A7F-2066
C:\Users\lslil\WorkSpack\v1 的目录
2023/08/29 09:09 <DIR> .
2023/08/29 09:06 <DIR> ..
2023/08/29 09:11 <DIR> classes
2023/08/29 09:07 <DIR> lib
2023/08/29 09:08 <DIR> src
0 个文件 0 字节
5 个目录 426,508,828,672 可用字节
C:\Users\lslil\WorkSpack\v1>
2、源码文件:Main.java
一个简单的小实现:借助hutool工具包完成字符串首字母大写,并输出Hello World!
lib
:存放jar包,hutool-all-5.4.0.jar
import cn.hutool.core.util.StrUtil;
public class Main {
public static void main(String[] args) {
System.out.println(StrUtil.upperFirst("hello World!"));
}
}
3、javac编译class文件
要求编译后的class
文件输出到classe目录中去。
javac -d classes -cp .\lib\hutool-all-5.4.0.jar .\src\Main.java
说明:
-d: 指定编译后文件的输出路径
-cp: 指定编译文件时(zip or jar包的扫描 路径)
编译成功后:会在classes文件中生成Main的class文件
C:\Users\lslil\WorkSpack\v1>dir classes
驱动器 C 中的卷没有标签。
卷的序列号是 0A7F-2066
C:\Users\lslil\WorkSpack\v1\classes 的目录
2023/08/29 09:11 <DIR> .
2023/08/29 09:09 <DIR> ..
2023/08/29 09:11 520 Main.class
1 个文件 520 字节
2 个目录 426,764,283,904 可用字节
C:\Users\lslil\WorkSpack\v1>
4、java运行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文件这个程序入口。
成功输出:Hello World!
C:\Users\lslil\WorkSpack\v1>java -cp .\lib\hutool-all-5.8.16.jar;classes Main
Hello World!
C:\Users\lslil\WorkSpack\v1>
5、为什么想要写一段不借助开发工具的代码编译运行过程?
-
经常使用idea开发,可idea是怎么运行一个程序的呢?
下面是我截取的idea在运行程序时的命令行。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
-
时不时动手写一段HelloWorld,不至于忘记,也复习一下java命令,学习一下编译、运行的一些文件加载过程。
6、注意!
环境不同参数也有些差别
Windows: java -cp "lib/*;." org.b3log.solo.Server
Unix-like: java -cp "lib/*:." org.b3log.solo.Server
标题:[ Java ] 【返璞归真】记事本方式编写Java文件,引入Jar包编译 & 运行
作者:llilei
地址:http://solo.llilei.work/articles/2023/08/29/1693276489898.html