怎么在命令行编译和执行 Java 程序

今天本来是在学习 Builder 模式,联想到之前使用过的 lombok 工具包,其中有一个 @Builder 注解,于是就想看看 lombok 是怎么实现 Builder 模式的。尴尬的是,由于一直以来都依赖 IDE,以至于忘了怎么在命令行编译和执行 Java 程序。最后去看了 javacjava 命令的文档才把这个问题弄明白,不由得发出『久在樊笼里,复得返自然』的感慨。

项目结构

假设我们的项目的目录结构如下

  • bin 开始是一个空目录,用来保存编译生成的 .class 文件。
  • lib 包含项目引用到的第三方 jar 包。
  • src 项目源码。

编译

大家知道,想要运行一个 Java 程序,首先需要将 .java 源文件编译成 JVM 能识别的 .class 文件。这里我们可以使用由 JDK 提供的 javac 命令。

直接在命令行敲出 javacjavac -help ,系统就会给出相关的提示。

项目代码结构

在命令行执行如下代码即可编译该项目

1
javac -d bin -cp lib/lombok.jar src/com/user/*.java src/com/application/Main.java
  • -d 指定编译后的 .class 文件所存放的目录。这里指定为 bin 目录。
  • -cp 指定编译时用户的 classpath,会覆盖用户之前在环境变量 CLASSPATH 中配置的路径。如果既没有指定 classpath,也没有配置 CLASSPATH,则默认为当前目录。这里指定为存放 jar 包的 lib 目录。
  • src/com/user/*.java src/com/application/Main.java 指定待编译的源码目录。

最终编译生成如下的 .class 文件结果如下。

运行

运行 Java 程序需要用到 java 命令。而且指定的类或 jar 包需要包含如下所示的 Main 方法。

1
public static void main(String args[]) {...}

在命令行执行如下代码即可运行该项目

1
2
java -cp bin com.application.Main 

  • -cp bin 指定存放 .class 文件的 bin 目录为用户的 classpath。
  • com.application.Main 指定类的全称。注意不要带 .java 后缀。

运行结果如下

代码

github 地址

引用