您的位置:首页 > 编程语言 > Java开发

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

2016-07-20 18:56 477 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java jvm jdk class