当前位置: 首页 > news >正文

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

文章目录

    • 编写Java类文件
    • javac编译
    • jar打包
    • java -jar执行
    • 做成bat文件,双击直接运行

编写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

相关文章:

  • 七种分布式系统的解决方案,一次性讲给你听!
  • 最长公共子序列
  • 异步通信技术AJAX | 基于JSON、XML的数据交换
  • 实战:一个脚本实现统计linux进程相关的信息
  • 免费开源的箱包制造行业ERP管理系统介绍
  • 【SpringBoot+Redis】实现多端登录+token自动续期和定期刷新+自定义注解和拦截器实现鉴权(角色和权限校验)
  • 跟着pink老师学JS的第三天总结
  • 嵌入式:ARM 汇编控制伪操作
  • 写给Java程序员的GRPC入门系列(3)
  • Python常用函数笔记汇总2
  • AI小组2022总结
  • 【jrebel and xrebel问题记录】激活时出现LS client not configued
  • css中动画之transition
  • QT学习 控件(一):按钮类
  • 数据治理:企业数据治理蓝图
  • Socket套接字(网络编程万字总结-附代码)
  • 6、GPIO输入按键检测(轮询检测)
  • C# XPath的概念
  • redhat9安装卸载mysql
  • 个人博客系统(前后端分离)
  • 五万吨级半潜船在沪完成装备装载
  • 周口一乡镇公务员“被老赖”,两年4场官司均败诉,市监局将线索移送公安厅
  • 牛市早报|今年国内核电项目审批首次开闸,离境退税起退点下调
  • “中国游”带火“中国购”,“即买即退”让外国游客购物更丝滑
  • 四川邻水县县长石国平拟任县(市、区)党委书记
  • 伊朗港口爆炸已造成281人受伤