Jar包

作者: 许宏川 | 来源:发表于2015-06-26 00:21 被阅读187次

当你写了一些工具类共享给别人使用的时候要怎么做呢?把你代码所在的文件夹拷贝给人吗?这多麻烦啊!正确的做法是打包成一个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命令


可以看到jar后面应该跟着各种参数,同时也列出了这些参数的意思与用法,其中打包用cvf这三个参数即可:
所以打包命令的格式就是:<code>jar -cvf jar包文件名 文件1 文件2 文件3...</code>
例如我现在敲:
<pre>
jar -cvf ArrayUtil.jar com
</pre>

结果是:


看看文件夹jar包已经出来了


Jar文件其实就是个压缩包,采用pack200压缩算法,它是ZIP压缩算法的一种。
既然Jar文件是个压缩包,看看它里面有什么吧?
如下图,com文件夹没什么好说的,就是ArrayUtil.class。
然后还会生成一个META-INF文件夹,里面放着一个MANIFEST.MF文件。它叫做这个jar包的清单文件,也可以认为是说明书。


我们把MANIFEST.MF打开看看(用Notepad++打开即可):


默认就两个内容,清单文件版本号和所用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,现在运行结果出来了:


相关文章

网友评论

      本文标题:Jar包

      本文链接:https://www.haomeiwen.com/subject/pqceqttx.html