Java命令行程序实战:javac编译,jar命令,jar包

本文详细介绍了如何从编写Java类文件开始,通过javac编译,jar打包,到最后制作成bat批处理文件,实现双击直接运行Java程序的全过程。主要内容包括编写UUID类,生成随机密钥,javac编译,创建manifest.txt,使用jar命令打包,java-jar执行jar文件,以及创建bat文件。整个流程清晰易懂,适合初学者学习。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

编写Java类文件

先写一个类,main()方法里面生成一个UUID,文件命名为UUID.java

package cn.liberg;
import java.util.Random;
public class UUID {
    /**
     * 将UUID中部分字符随机替换为G-Z
     * 生成一个HEX大写的密钥
     */
    public static String generateSecret() {
        final String s = java.util.UUID.randomUUID().toString();
        System.out.println("raw: " + s.toUpperCase());
        Random random = new Random();
        final char[] chars = s.toCharArray();
        for(int i=0;i<12;i++) {
            int index = random.nextInt(36);
            if(chars[index] != '-') {
                char c = (char)('g'+random.nextInt(20));
                chars[index] = c;
            }
        }
        return new String(chars);
    }
    // args[0..]开始是命令行运行程序时传入的参数
    public static void main(String[] args) {
        System.out.println("secret: " + generateSecret().toUpperCase());
    }
}

javac编译

UUID.java所在目录下,新建一个bin文件夹,用来存放编译后的class文件。

通过javac命令,指定-d bin参数,将UUID.java文件编译输出到bin目录下面。

javac -encoding UTF-8 -d bin UUID.java

编译成功之后,得到bin/cn/liberg/UUID.class文件。

jar打包

bin目录下创建manifest.txt文本文件,文件内容如下:

Main-Class: cn.liberg.UUID

需要特别注意,文件内容格式:

Main-Class:(空格)全限定类名(回车)

类名后的回车不能少!!

然后在bin目录下打开控制台,执行jar命令打包(和tar命令类似):

jar cvfm uuid.jar manifest.txt cn
已添加清单
正在添加: cn/(输入 = 0) (输出 = 0)(存储了 0%)
正在添加: cn/liberg/(输入 = 0) (输出 = 0)(存储了 0%)
正在添加: cn/liberg/UUID.class(输入 = 1086) (输出 = 688)(压缩了 36%)

jar命令将读取manifest.txt文件中的配置,并将整个cn目录打包进uuid.jar中。其中各个参数的含义:

c:create,指定是创建新的归档文件。
v:verbose,在标准输出中生成详细输出,该选项是可选的。
f:指定打包后的jar文件名。
m:指定自定义的MANIFEST.MF清单文件,否则,默认会生成不包含Main-Class的清单文件。

jar更详细的用法可以查看帮助:

PS D:\dev\java\liberg\UUID\bin> jar --help
用法: jar {ctxui}[vfm0Me] [jar-file] [manifest-file] [entry-point] [-C dir] files ...
选项包括:
    -c  创建新的归档文件
    -t  列出归档目录
    -x  从档案中提取指定的 (或所有) 文件
    -u  更新现有的归档文件
    -v  在标准输出中生成详细输出
    -f  指定归档文件名
    -m  包含指定清单文件中的清单信息
    -e  为捆绑到可执行 jar 文件的独立应用程序
        指定应用程序入口点
    -0  仅存储; 不使用情况任何 ZIP 压缩
    -M  不创建条目的清单文件
    -i  为指定的 jar 文件生成索引信息
    -C  更改为指定的目录并包含其中的文件
如果有任何目录文件, 则对其进行递归处理。
清单文件名, 归档文件名和入口点名称的指定顺序
与 'm', 'f''e' 标记的指定顺序相同。

示例 1: 将两个类文件归档到一个名为 classes.jar 的归档文件中:
       jar cvf classes.jar Foo.class Bar.class
示例 2: 使用现有的清单文件 'mymanifest' 并
           将 foo/ 目录中的所有文件归档到 'classes.jar' 中:
       jar cvfm classes.jar mymanifest -C foo/ .

java -jar执行

通过java -jar执行打包好的jar文件:

PS D:\dev\java\liberg\UUID\bin> java -jar uuid.jar
raw: 2262B6A4-938B-42E2-80D0-B81DCA9668AE
secret: 2262B6R4-93KB-4RS2-80D0-BW1DNA9668AE

做成bat文件,双击直接运行

最后,如果是Windows系统,还可以写一个.bat文件,双击可以直接运行:

@echo off
java -jar D:/software/green/uuid/uuid.jar
pause
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值