JDK 工具
Laeni
2023-03-19
javac - 编译 .java 源文件
javac命令读取用 Java 编程语言编写的类和接口定义,并将它们编译为字节码类文件。 该命令还可以处理 Java 源文件和类中的注释。
# 编译 .java 源文件
$ javac Test.java
$ javac javac com/example/Test.java
# 默认情况下,编译器将每个类文件放在与其源文件相同的目录中。 可以使用 -d 选项指定一个目录存输出文件
$ javac -d dist/ com/example/Test.java
JDK 9 中引入了启动器环境变量JDK_JAVAC_OPTIONS
,该变量将其内容附加到 javac 的命令行前。
$ JDK_JAVAC_OPTIONS='-d dist/' javac com/example/Test.java
选项(部分)
-
@filename
- 从文件中读取选项(除了-J
选项)和文件名,以缩短或简化javac
命令。可以指定一个或多个包含 javac 命令参数的文件,这可以在任何操作系统上创建任何长度的 javac 命令。
-
示例1 - 将全部选项和源文件参数放在一个文件中
$ cat <<EOF | tee argfile -d classes -g -sourcepath /java/pubs/ws/1.3/src/share/classes MyClass1.java MyClass2.java MyClass3.java EOF $ javac @argfile
-
示例2 - 选项和源文件参数分开放
$ cat <<EOF | tee options -d classes -g -sourcepath /java/pubs/ws/1.3/src/share/classes EOF $ cat <<EOF | tee classes MyClass1.java MyClass2.java MyClass3.java EOF $ javac @options @classes
-
示例3 - 编译简单SpringBoot项目
$ javac -d dist \ --class-path ./spring-boot-3.0.4.jar:./spring-boot-autoconfigure-3.0.4.jar:./spring-context-6.0.6.jar \ src/main/java/com/example/Application.java
当
@filename
文件路径中含有空格时,必须使用单引号'
或双引号"
引用包含空白字符的参数javac @"C:\white spaces\argfile" ... javac "@C:\white spaces\argfile" ... javac @C:\"white spaces"\argfile ...
-
javap - 反编译 .class 文件
javap - 反汇编一个或多个类文件。
$ javap path/to/MyClass.class # 通过文件名指定
$ javap jar:file:///path/to/MyJar.jar!/mypkg/MyClass.class # 通过URL指定
$ javap java.lang.Object # 在类路径中能找到的完全限定类名
jshell - Java Shell 工具
jshell - 提供一种交互式评估 Java 编程语言的声明、语句和表达式的方法, 使学习语言、探索不熟悉的代码和 API 以及制作复杂代码的原型变得更加容易。 接受 Java 语句、变量定义、方法定义、类定义、导入语句和表达式。 输入的代码位称为片段。
简单使用如下:
$ jshell \
DEFAULT `# [预定义脚本]加载通常用作导入的默认条目`\
JAVASE `# [预定义脚本]导入所有 Java SE 包`\
PRINTING `# [预定义脚本]将 print、println 和 printf 定义为 jshell在工具中使用的方法`
| 欢迎使用 JShell -- 版本 17.0.4.1
| 要大致了解该版本, 请键入: /help intro
$ jshell> int a=4
a ==> 4
$ jshell> println(a)
4
$ jshell> int add(int i) {
...> return i*i;
...> }
| 已创建 方法 add(int)
$ jshell> println(add(6))
36
jar - 存档工具
jar - 为类和资源创建存档,并可以从存档中操作或恢复单个类或资源。jar 命令是一种基于 ZIP 和 ZLIB 压缩格式的通用归档和压缩工具。
jar 命令语法示例
# 创建一个`classes.jar`存档,包含两个类文件, `Foo.class`和 `Bar.class`.
$ jar --create --file classes.jar Foo.class Bar.class
#创建一个`classes.jar`存档,通过使用现有清单, `mymanifest`,其中包含目录 foo/ 中的所有文件。
$ jar --create --file classes.jar --manifest mymanifest -C foo/
#创建一个模块化 JAR 归档文件 foo.jar,其中模块描述符位于 classes/module-info.class 中。
$ jar --create --file foo.jar --main-class com.foo.Main --module-version 1.0 -C foo/classes resources
#将现有的非模块化 JAR foo.jar 更新为模块化 JAR 文件。
$ jar --update --file foo.jar --main-class com.foo.Main --module-version 1.0 -C foo/module-info.class
其他可能用到的工具
- jarsigner - 对 Java 归档 (JAR) 文件进行签名和验证
- Java - 启动 Java 应用程序
- javadoc - 从 Java 源文件生成 API 文档的 HTML 页面
- jcmd - 将诊断命令请求发送到正在运行的 Java 虚拟机 (JVM)
- jconsole - 启动图形控制台以监视和管理 Java 应用程序
- JDB - 查找并修复 Java 平台程序中的错误
- jdeprscan - 静态分析工具,用于扫描 JAR 文件(或类文件的其他一些聚合)以使用已弃用的 API 元素
- jdeps - 启动 Java 类依赖关系分析器
- JFR - 解析和打印飞行记录器文件
- jhsdb - 附加到 Java 进程或启动事后调试器以分析崩溃的 Java 虚拟机 (JVM) 中的核心转储的内容
- jinfo - 为指定的 Java 进程生成 Java 配置信息
- jlink - 将一组模块及其依赖项组装并优化为自定义运行时映像
- JMAP - 打印指定进程的详细信息
- jmod - 创建 JMOD 文件并列出现有 JMOD 文件的内容
- jpackage - 打包一个独立的 Java 应用程序
- JPS - 列出目标系统上已检测的 JVM
- jrunscript - 运行支持交互和批处理模式的命令行脚本外壳
- jstack - 为指定的 Java 进程打印 Java 线程的 Java 堆栈跟踪
- jstat - 监视 JVM 统计信息
- jstatd - 监视已检测的 Java HotSpot VM 的创建和终止
- keytool - 管理加密密钥、X.509 证书链和受信任证书的密钥库(数据库)
- rmid - 启动激活系统守护程序,该守护程序允许在 Java 虚拟机 (JVM) 中注册和激活对象
- RMIregistry - 在当前主机上的指定端口上创建并启动远程对象注册表
- serialver - 以适合复制到不断发展类的形式返回一个或多个类的“serialVersionUID”