使用 java 命令编译运行 java 程序

来源:互联网 发布:异地淘宝客服招聘 编辑:程序博客网 时间:2024/06/06 05:58

java 编译的过程,就是将 java 项目从源文件变成 .class 文件的过程,而 .class 文件,最后会被加载到JVM 中运行。在 JDK bin/ 目录下,提供了 javac 命令,用于将 .java 源文件编译成 .class 字节码文件,提供了 java 命令,以 Main_Class 为入口,根据运行需要,加载相应的 class 文件到 JVM 中执行。

关于环境变量

如果在没有引用第三方 jar 的情况下,想在任意目录下直接运行 javac 编译 .java 文件,则需要设置 PATH 和 CLASSPATH 环境变量,关于如何设置,可参考 Ubuntu 下如何设置 Java 环境变量

两种情况

如果 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 命令运行程序

jar 命令生成 jar 包

>$ cd classes // 首先进入根目录,否则打包会有问题>$ touch MANIFEST.MF>$ jar -cvfm xx.jar MANIFEST.MF com//** * c 表示创建压缩包 .jar 包 * v 表示 显示详细信息 * m 表示将后面的清单文件 MANIFEST.MF 一并打包到 jar 里面去,注意这个不能省略 * xx.jar 表示最终生成的 jar包名 * classes/ 表示存放所有 .class 文件的 package 根目录 * 其中 清单文件 MANIFEST.MF 的内容如下:   Manifest-Version: 1.0        // 清单版本   Main-Class: com.linky.Main   // jar 包运行后的 main 函数入口类 */

打包成功后,会在根目录下生成 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
0 0