Java 编译的过程,就是将 java 项目从源文件变成 .class 文件的过程,而 .class 文件,最后会被加载到JVM 中运行。在 JDK bin/ 目录下,提供了 javac 命令,用于将 .java 源文件编译成 .class 字节码文件,提供了 java 命令,以 Main_Class 为入口,根据运行需要,加载相应的 class 文件到 JVM 中执行。
关于环境变量如果在没有引用第三方 jar 的情况下,想在任意目录下直接运行 javac 编译 .java 文件,则需要设置 PATH 和 CLASSPATH 环境变量,关于如何设置,可参考
Ubuntu 14.04安装JDK1.8.0_25与配置环境变量
CentOS 搭建JDK环境
Ubuntu 14.04安装JDK1.8.0_25与配置环境变量
Ubuntu 14.04 LTS安装Oracle JDK 1.8
两种情况如果 java 程序只有单个 .java 文件,且里面有 public static void main(String[] args) 方法,可以直接使用 javac 编译生成 .class 文件 -> 使用 java 命令运行程序
>$ javac Hello.java >$ java Hello如果有多个 .java 文件,则多了一个步骤,需要先打包成 .jar 文件,最后使用 java -jar xx.jar 命令运行即可,总结如下:使用 javac 编译生成 .class 文件 -> 使用 jar 命令生成 jar 包 -> 使用 java 命令运行程序
打包成功后,会在根目录下生成 META-INF/ 和 com/ 两个子目录,其中 META-INF/ 中存放了清单文件MANIFEST.MF,com/ 目录下存放了所有 .class 文件。
如果有多个 .java 文件,可以将需要编译的 .java 文件,包括 package,写入 sourcelist(可随便命名) 中,详情可见 javac
完整命令如下:
>$ find com/ -name '*.java' > sourcelist >$ javac @sourcelist -d classes/ >$ cd classes/ >$ touch MANIFEST.MF // 添加如下语句到该文件中,然后保存 Manifest-Version: 1.0 Main-Class: com.linky.Server // 里面包含 main 入口函数 >$ jar -cvfm server.jar MANIFEST.MF com/ >$ java -jar server.jar