记事本方式编写Java文件,引入Jar包编译 & 运行

    今天用记事本写一段Java代码,突然想到如果用记事本写java代码引入一个Jar包该怎么编译和运行呢?直接上手试一下。

1、文件目录

    即便是纯手写代码也要尽可能的去模拟一下真实的项目结构:

记事本方式编写Java文件,引入Jar包编译 & 运行_第1张图片

2、源码文件:Main.java

    一个简单的小实现:借助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!"));
    }
}

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文件
记事本方式编写Java文件,引入Jar包编译 & 运行_第2张图片

4、java运行class文件

    通常地,在最开始学习用记事本写一段java代码输出Hello World!的时候,只要是编译成功了直接运行(java Main)就能得出结果,但是因为现在引入jar包的原因,直接运行:报错!在运行时找不到对应的class文件,可是明明已经打包成功了?那是因为在运行的时候没有在对应的classpath中找到hutool的工具包。 所以报错了,如果不报错,就需要找到它(废话文学!)
    说到这就不得不扯一扯java.lang.NoClassDefFoundErrorjava.lang.ClassNotFoundException之间的区别了,可这是另外的价钱,想要了解的可自行百度(其实下文附有链接).

记事本方式编写Java文件,引入Jar包编译 & 运行_第3张图片

java -cp .\lib\hutool-all-5.4.0.jar;classes Main
说明:
-cp:运行时需要扫描的文件路径
这里为什么要加上classes呢?因为class文件在里面,运行的时候需要去里面找Main文件这个程序入口。

注意文件路径:这决定着上面的运行命令怎么写。

在这里插入图片描述
成功输出:Hello World!

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
  1. 时不时动手写一段HelloWorld,不至于忘记,也复习一下java命令,学习一下编译、运行的一些文件加载过程。

参考链接

用记事本写的java程序引用jar文件
关于怎么解决java.lang.NoClassDefFoundError错误

你可能感兴趣的:(#,java,java,jar,classpath)