JDK工具使用总结
javac
常用参数:
- -d <directory>:指定输出目录,编译后的 .class 文件将放在该目录中
- -classpath <path> 或 -cp <path>:指定类路径,包含其他 .class 文件或库的路径。javac -cp lib/* src/MyClass.java
- -source <version>:指定源代码的版本
- -target <version>:指定生成的字节码的版本,javac -target 11 src/MyClass.java
- -encoding <encoding>:指定源文件的编码格式(例如 UTF-8)
Bash:编译指定多个jar包作为类路径,使用:隔开
javac -d classes -cp lib/jackson-annotations-2.6.7.jar:lib/jackson-core-2.6.7.jar:lib/jackson-databind-2.6.7.jar $(find src/ -name '*.java')
PowerShell
javac -d classes -cp "lib\jackson-annotations-2.6.7.jar;lib\jackson-core-2.6.7.jar;lib\jackson-databind-2.6.7.jar" (Get-ChildItem -Path src -Filter *.java -Recurse).FullName
CMD
javac -d classes -cp lib\jackson-annotations-2.6.7.jar;lib\jackson-core-2.6.7.jar;lib\jackson-databind-2.6.7.jar src\**\*.java
jar
jar命令用于创建、提取、列出和更新jar包的工具。
jar {ctxui}[vfmn0PMe] [jar-file] [manifest-file] [entry-point] [-C dir] files ...
主要操作参数
- c - 创建新的JAR文件
- t - 列出JAR文件的内容
- x - 提取JAR文件中的指定文件(或所有文件)
- u - 更新现有的JAR文件
- i - 为指定的JAR文件生成索引信息
修饰参数
- v - 在标准输出中生成详细输出
- f - 指定JAR文件名(第二个参数)
- m - 包含指定清单文件(manifest)中的信息
- n - 执行创建JAR文件后对其规范化
- 0 - 仅存储,不使用ZIP压缩
- P - 保留绝对路径(不推荐使用)
- M - 不创建清单文件(manifest)
- e - 为捆绑到可执行JAR文件的独立应用程序设置入口点
以下是一些常用的jar命令:
创建jar包
PS:对于实际项目,建议使用构建工具如Maven或Gradle来管理 Jar 构建过程,使用命令过于繁琐了
创建一个新的jar包,将指定的文件或目录添加到jar包中。jar cf <jar包名.jar> <文件或目录>,例如: 将MyClass.class和MyOtherClass.class添加到myapp.jar中
jar cf myapp.jar MyClass.class MyOtherClass.class
jar cvf <jar包名.jar> <文件或目录>: 与jar cf类似,但会显示详细的打包过程信息.
jar cfm <jar包名.jar> <清单文件> <文件或目录>: 创建一个包含清单文件的jar包。清单文件是一个文本文件,包含了jar包的元数据,例如主类、版本信息等。
jar cvfm <jar包名.jar> <清单文件> <文件或目录> 会显示详细的打包过程信息.
指定MANIFEST.MF文件
jar cvfm MyFatApp.jar META-INF/MANIFEST.MF -C target/classes . -C target/dependency .
批量添加多个目录下的所有classes,-C后面指定的目录是自动递归查找目录的
jar cvfe MyApp.jar com.example.MainClass -C build/classes . -C resources .
- cvfe:创建(c)详细(v)JAR文件(f)并设置入口点(e)
- MyApp.jar:输出的JAR文件名
- com.example.MainClass:主类(入口点)
- -C build/classes .:切换到build/classes目录,包含当前目录(切换后的目录)所有文件(.)
- -C resources .:切换到resources目录,包含当前目录(切换后的目录)所有文件(.)
创建带索引的JAR文件以提高类加载性能
# 首先创建普通JAR
jar cf MyApp.jar -C target/classes .
# 然后生成索引
jar i MyApp.jar
创建模块化JAR文件(Java 9+)
jar --create --file=mlib/my.module.jar \
--module-version=1.0 \
--main-class=com.example.MainClass \
-C mods/my.module .
清单文件
https://docs.oracle.com/javase/tutorial/deployment/jar/defman.html
- 清单文件必须以空行结束,否则最后一行可能不会被识别
更新JAR文件中的特定资源
# 更新JAR中的配置文件
jar uvf MyApp.jar config.properties
# 更新JAR中的特定类文件
jar uvf MyApp.jar com/example/MyClass.class
签名JAR文件
# 首先创建JAR
jar cvf MyApp.jar -C target/classes .
# 然后签名
jarsigner -keystore myKeystore -storepass password MyApp.jar myAlias
验证签名的JAR
jarsigner -verify -verbose -certs MyApp.jar
查看jar包内容
jar tf <jar包名.jar>: 列出jar包中所有文件和目录的名称.
jar tvf <jar包名.jar>: 显示jar包中所有文件和目录的详细信息,例如大小、修改日期等.
提取jar包内容
jar xf <jar包名.jar>: 将jar包中的所有内容提取到当前目录.
jar xvf <jar包名.jar>: 与jar xf类似,但会显示详细的提取过程信息.
# 提取单个文件
jar xvf MyApp.jar META-INF/MANIFEST.MF
# 提取整个目录
jar xvf MyApp.jar com/example/
运行jar包
使用java命令运行指定的jar包
java -jar <jar包名.jar>
java -jar <jar包名.jar> [参数]
# 在后台不挂断地运行jar包
nohup java -jar <jar包名.jar> &
# 在后台不挂断地运行jar包,并将输出重定向到log.txt文件
nohup java -jar <jar包名.jar> > log.txt 2>&1 &
其他常用命令
jar -C <目录> <文件或目录>: 在打包或提取时,指定一个工作目录.
jar -i <jar包名.jar>: 为jar包生成索引,用于模块化开发.
jar -M: 在打包时,不生成META-INF/MANIFEST.MF文件.
java
- -classpath 或 -cp:指定类路径,用于查找类和资源文件。
java -cp "lib/*:." com.example.MainClass
使用 -cp 选项时,类路径中的多个路径用冒号 : (Linux)或分号 ; (Windows)分隔。
JAR 文件中的 META-INF/MANIFEST.MF 文件需要指定 Main-Class,以便使用 -jar 选项时正常运行。
通过这些常用选项和示例,你可以更有效地使用 java 命令来运行 Java 应用程序。
- -D
= :设置系统属性。例如:
java -Denv=production -cp . com.example.MainClass
- -jar
:运行一个 JAR 文件。必须在 JAR 文件中指定 Main-Class。
java -jar myapp.jar
- -Xmx
:设置最大堆内存大小。例如:
java -Xmx512m -cp . com.example.MainClass
- -Xms
:设置初始堆内存大小。例如:
java -Xms256m -cp . com.example.MainClass
- -version:显示 Java 版本信息。
java -version
-
-help:显示帮助信息。
-
-verbose:开启详细输出,显示类加载信息。
java -verbose -cp . com.example.MainClass

浙公网安备 33010602011771号