目录

工欲善其事

实践出真知

活跃标签: linux java mysql 待分类 js springboot win10 电路 vue macOS nginx esp32 git docker windows idea maven esp8266 python Arduino

存档:

X

[ 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.NoClassDefFoundErrorjava.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、为什么想要写一段不借助开发工具的代码编译运行过程?

  1. 经常使用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
    
  2. 时不时动手写一段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