一, 什么是jar包
java中, 源代码文件是*.java, 编译后就生成若干class文件. 这些class文件可以被各平台的jvm虚拟机执行.
java还提供1个工具, 可以将这些class文件打包成若干个包裹. 这些包裹就是所谓的jar包了.
二, jar包的作用.
jar包的作用主要分两点
1. 用于发布产品.
比如你写了若干个类, 但是并不想公开源代码, 你可以把编译出的class文件打包成jar包, 附加上说明书发布.
2. 方便项目管理
项目中, 可以把公共常用的, 不常改动的class文件按照分类规则打包成若干个jar包.
三, 如何生成jar包.
下面用1个简单例子来说明.
首先在任意目录编写1个简单的类 Test_jar1.java
package pkg1.pkg2;
public class Test_jar1{
private int i;
public Test_jar1(int i){
this.i = i;
}
public void f(){
System.out.printf("Test_jar: i is %d !\n", this.i);
}
}
可以见到我为这个类添加了1个包层: pkg1.pkg2
也就是说这个类是属于pkg2包的, 而pkg2包是属于pkg1包的. 这里的包可以简单地理解成文件夹..
接下来在当前目录执行下面的编译命令:
javac -d . Test_jar1.java
那么命令就会把源代码文件编译成Test_jar1.class文件, 并放入pkg1/pkg2文件夹中(自动生成)
gateman@TFPC jar $ tree
.
|-- pkg1
| `-- pkg2
| `-- Test_jar1.class
`-- Test_jar1.java
2 directories, 2 files
也就是说 pkg1 这个文件夹就是我们编译出来的类文件包. 我们需要把这个文件夹打包成1个jar包.
执行如下命令:
jar cvf 包名.jar 你想打包的包目录
gateman@TFPC jar $ jar cvf Test_jar.jar pkg1/
已添加清单
正在添加: pkg1/(输入 = 0) (输出 = 0)(存储了 0%)
正在添加: pkg1/pkg2/(输入 = 0) (输出 = 0)(存储了 0%)
正在添加: pkg1/pkg2/Test_jar1.class(输入 = 581) (输出 = 378)(压缩了 34%)
gateman@TFPC jar $ ls
pkg1 Test_jar1.java Test_jar.jar
gateman@TFPC jar $
可以见到执行命令后, 当前目录多了1个Test_jar.jar 文件, 这个就是生成出来的jar包.
四, 如何使用jar包.
一般项目都有个位置专门存放jar包.
在这里我们可以把刚才生成的jar包Test_jar..jar搬到任意位置.
例如我就放在目录:
/home/gateman/Studies/Java/java_start/Java_1/jar/generated
gateman@TFPC generated $ pwd
/home/gateman/Studies/Java/java_start/Java_1/jar/generated
gateman@TFPC generated $ ls
Test_jar.jar
然后修改/etc/profile , 把这个jar包的full路径, 添加到CLASSPATH 这个环境变量中.
gateman@TFPC Java_1 $ echo $CLASSPATH
.:/usr/lib/jvm/java-7-sun/lib:/usr/lib/jvm/java-7-sun/jre/lib:/usr/share/ant/lib/ant-launcher.jar:/home/gateman/Studies/Java/java_start/Java_1/jar/generated/Test_jar.jar
注意要带上包名
如果是ant编译运行的, 最好吧包路径也写进build.xml中.
然后在编写1个类测试这个包:
package Package_kng;
import pkg1.pkg2.*;
public class Pkg_1{
public static void f(){
Test_jar1 t = new Test_jar1(2);
t.f();
}
}
注意开头import 那个包就ok了.
测试通过:
[java] Test_jar: i is 2 !