当你写了一些工具类共享给别人使用的时候要怎么做呢?把你代码所在的文件夹拷贝给人吗?这多麻烦啊!正确的做法是打包成一个jar文件。
做法示例:
我写一个非常简单的ArrayUtil:
package com.xuhongchuan.jardemo;
public class ArrayUtil {
//求一个int数组的最大值
public int getMax(int[] arr) {
int max = arr[0];
for(int i = 1; i < arr.length; i++) {
if(max < arr[i]) {
max = arr[i];
}
}
return max;
}
//求一个int数组的最小值
public int getMin(int[] arr) {
int min = arr[0];
for(int i = 1; i < arr.length; i++) {
if(min > arr[i]) {
min = arr[i];
}
}
return min;
}
}
编译后生成
<pre>
com\xuhongchuan\jardemo\ArrayUtil.class
</pre>
接着可以用jar命令进行打包,jar命令怎么用呢?我们先敲一个jar命令
![](https://img.haomeiwen.com/i323464/9a4b9e78e149fa0a.png)
可以看到jar后面应该跟着各种参数,同时也列出了这些参数的意思与用法,其中打包用cvf这三个参数即可:
所以打包命令的格式就是:<code>jar -cvf jar包文件名 文件1 文件2 文件3...</code>
例如我现在敲:
<pre>
jar -cvf ArrayUtil.jar com
</pre>
结果是:
![](https://img.haomeiwen.com/i323464/f6f80052301c0777.png)
看看文件夹jar包已经出来了
![](https://img.haomeiwen.com/i323464/f03d495244981ae5.png)
Jar文件其实就是个压缩包,采用pack200压缩算法,它是ZIP压缩算法的一种。
既然Jar文件是个压缩包,看看它里面有什么吧?
如下图,com文件夹没什么好说的,就是ArrayUtil.class。
然后还会生成一个META-INF文件夹,里面放着一个MANIFEST.MF文件。它叫做这个jar包的清单文件,也可以认为是说明书。
![](https://img.haomeiwen.com/i323464/3641ee0f9e9b7a8f.png)
我们把MANIFEST.MF打开看看(用Notepad++打开即可):
![](https://img.haomeiwen.com/i323464/3fab86a9e4a79aeb.png)
默认就两个内容,清单文件版本号和所用jdk的版本。
那这个jar包怎么用呢?
首先我把编译出来的com文件夹删了,自己写的ArrayUtil.java也删了,就留下一个ArrayUtil.jar。就假装这个jar包是别人发给我的,然后我新建一个Test类:
package com.xuhongchuan.jardemo;
public class Test {
public static void main(String[] args) {
int[] arr = {2, -3, 4, 7, 0};
ArrayUtil au = new ArrayUtil();
System.out.println("最大值是" + au.getMax(arr));
System.out.println("最小值是" + au.getMin(arr));
}
}
接下来编译,因为要使用ArrayUtil.jar,所以较之前的编译命令要添加<code>-cp</code>参数,cp是classpath的缩写也就是路径的意思,就是要指明去哪里找class。如果不使用这个参数则默认会去classpath环境变量指定的路径找。
我这个时候敲编译Test.java命令:
<pre>
javac -d . -cp ArrayUtil.jar Test.java
</pre>
然后要运行,运行依然要使用jar包所以<code>-cp ArrayUtil.jar</code>这部分不能少,但是还要添加本地目录,所以要在后面添加“;.”。
具体命令是:
<pre>
java -cp ArrayUtil.jar;. com.xuhongchuan.jardemo.Test
</pre>
OK,现在运行结果出来了:
![](https://img.haomeiwen.com/i323464/b2eb74ed66659e3d.png)
网友评论