命令行下运行Java程序的方法
这是个简单但容易忽略的问题,新手往往被一些看似不起眼的小坑阻挡而裹足不前——本文旨在以最轻松的氛围讲解如何在命令行界面下运行Java程序,包括使用Jar工具进行打包
写在前面
Java的文件体系
Java的.java
源程序(source code)要被编译成.class
文件即类文件(class file,全称Java class file),它在平台无关性方面的任务是:为Java程序提供独立于底层主机平台的二进制形式的服务——不管怎么样,它就是一个二进制文件(binary file)
而要和计算机打交道,就是通过二进制文件进行的
另外,如果在IDE中编写Java程序,IDE通常会为开发者提供舒适的开发环境:src
文件中存放源程序,而bin
文件中存放编译后的类文件
Java的JDK工具包
到Sun公司官网下载Java SE版本(标准版Java)的JDK(Java Development Kit),你会得到:1)JRE(Java Runtime Environment),2)Java核心类库,3)Java工具包
其中,Java工具包包括java
、javac
、javadoc
等,都是一些命令行实用工具
Java的环境变量搭建
要想在命令行模式下运行Java程序,就得把Java的相关属性变量导到用户的环境变量中去
我的Shell是zsh
,但是这并不妨碍~/.bash_profile
文件的执行
vi ~/.bash_profile
执行class文件
通过如下命令行指令先将.java
文件编译为.class
文件
javac Foo.java
这会得到一个文件名为Foo.class
的.class
文件;接着使用java
指令对运行该二进制文件
java Foo.class
举例如下:
1)写一个简单的demo,注意文件名和公共类的类名一致
2)javac
命令编译该源程序,得到.class
文件
3)java
命令运行该编译后的Java类文件
需要注意的是,如果用IDE进行编写(或者对于有着良好习惯的coder),我们编译后的文件通常在包(package)文件夹下面,在cd
到工程目录(project direcorry)下后,这时候需要显式写出包名.类文件名
的形式,以指定包名(相当于相对路径寻址)
执行jar文件
.jar
文件等于.class
文件和其它一些程序必须的素材文件之和,比如一个Java工程引用了目录下的一张图片、一段音乐,如果想把它们和代码文件合成为一个入口文件即.jar
文件,就要用到jar打包技术
.jar
命令行工具同样随JDK一并导入用户所在环境
jar
命令的参数有很多
从实战、实用角度出发,我们推荐使用如下打包命令
jar cvfm Foo.class
其中m
参数指定一个mainfest
文件(包括Java class文件的相关信息)
最简单的mainfest
文件可以这样写
注意:在Main-Class:
后面有一个空格,否则在识别时会报错
写好了mainfest
文件就可以进行打包了
jar cvfm foo.jar mainfest.mf *.class
*.class
中星号通配符会匹配当前目下所有的Java类文件(这里只有一个类文件用处不大,仅作为说明)
然后使用java -jar 文件名.jar
在终端下运行该.jar
文件
说明三点:1)最后不要使用open
直接打开.jar
文件,否则可能会出现下面的情况
2)如果使用IDE进行开发,通常它集成了.jar
文件打包功能(自己摸索)
3)还是考虑到Java文件体系,如果有包的话,就写出完整包名