一直用Meavn编译打包应用。期间也断断续续了解过一些编译的命令,但是不是很系统尤其是对classpath概念的模糊,这一次写一篇文章记录一下自己的成果。
参考的博客:
http://www.cnblogs.com/haolujun/archive/2013/03/02/2939698.html
javac命令(编译)
1 | 用法: javac <options> <source files> |
java命令(运行)
1 | 用法: java [-options] class [args...] |
jar命令(打包)
1 | 用法: jar {ctxui}[vfmn0PMe] [jar-file] [manifest-file] [entry-point] [-C dir] files ... |
编译最简单的应用
文件目录
1 | test02--|---src---|---A.java--| |
代码
1 |
|
运行命令
1 | cd java/test01/src |
输出结果
1 | I am A! |
classpath
(1)要想成功编译java文件,需要有classpath和包名(package)的共同配合。
类发现规则:class文件所在目录 = classpath + ‘\’ + 包名(包名中的’.’全变成’\’)
这个规则大家一定要记住,保证万事OK!Java就是靠这个规则来寻找需要的class文件的。
(2)何时需要使用-classpath:当你要编译或执行的类引用了其它的类,但被引用类的.class文件不在当前目录下时,就需要通过-classpath来引入类
(3)何时需要指定路径:当你要编译的类所在的目录和你执行javac命令的目录不是同一个目录时,就需要指定源文件的路径(CLASSPATH是用来指定.class路径的,不是用来指定.java文件的路径的)
引入package
文件目录
1 | test03--|---src---|---com---|-baobing-|---A.java--| |
代码
1 | package src.com.baobing; |
1 |
|
运行命令
1 | cd ~/java/test02 |
输出结果
1 | I am A! |
需要注意的是包名一定更要和文件目录一一对应。 否则会报错。
编译时给出正确的classpath和正确的包名,javac程序即可自动查找编译B.java依赖的A.java文件。
打JAR包
文件路径以及代码都与《引入package》环节的一致,就不赘述了。
运行命令
1 | cd java/test03 |
输出结果
1 | I am A! |
引用jar包
1 | ---test04--|---src---|---C.java--| |
代码
1 | package src; |
运行命令
1 | cd java/test04 |
运行结果
1 | I am A! |
可执行jar包
文件目录
1 | test03--|---src-----|---com---|-baobing-|---A.java--| |
代码
A.java和B.java的代码与《引入package》环节的一致,不赘述。
注意事项:Main-Class一定要是第一行,不知道原因1
2
3Main-Class: src.B
Manifest-Version: 1.0
Created-By: 1.8.0_51 (Oracle Corporation)
运行命令
1 | cd java/test05 |
输出
1 | I am A! |