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