zoukankan      html  css  js  c++  java
  • Jar包那些事儿

    本文由广州java培训小编为你整理:

    JAR全名Java Archive,直译为Java归档文件。它是一种文件格式,以zip文件为基础(经过压缩),主要用途是发布Java程序,部署和封装库、组件等。

        在Android、J2EE等平台下,jar包用来做库和组件的用途比较多。

        尤其在项目中有框架的情况,把框架以jar包的形式发布,好处多多。下面我就如何做成上述两种jar包分别说明。

        在JDK环境中提供jar工具,它的主要功能就是可以完成将一系列相关的程序文件压缩为一个jar包。用法还是很简单的,下面是它的所有指令:

        [plain]

        C:Documents and SettingsAdministrator>jar -help

        非法选项:h

        用法: jar {ctxui}[vfm0Me] [jar-file] [manifest-file] [entry-point] [-C dir] file

        s …

        选项包括:

        -c  创建新的归档文件

        -t  列出归档目录

        -x  解压缩已归档的指定(或所有)文件

        -u  更新现有的归档文件

        -v  在标准输出中生成详细输出

        -f  指定归档文件名

        -m  包含指定清单文件中的清单信息

        -e  为捆绑到可执行 jar 文件的独立应用程序

        指定应用程序入口点

        -0  仅存储;不使用任何 ZIP 压缩

        -M  不创建条目的清单文件

        -i  为指定的 jar 文件生成索引信息

        -C  更改为指定的目录并包含其中的文件

        如果有任何目录文件,则对其进行递归处理。

        清单文件名、归档文件名和入口点名的指定顺序

        与 "m"、"f" 和 "e" 标志的指定顺序相同。

        示例 1:将两个类文件归档到一个名为 classes.jar 的归档文件中:

        jar cvf classes.jar Foo.class Bar.class

        示例 2:使用现有的清单文件 "mymanifest" 并

        将 foo/ 目录中的所有文件归档到 "classes.jar" 中:

        jar cvfm classes.jar mymanifest -C foo/ .

        封装库和组件

        用于做示范,我写了两个类,Print和Log,源码如下:

        [java]

        package linc.util;

        public class Log

        {

        public void debug(String msg)

        {

        System.out.println("Debug:" + msg);

        }

        public void info(String msg)

        {

        System.out.println("Info:" + msg);

        }

        }

        [java]

        package linc.util;

        public class Print

        {

        public void printOnce(String msg)

        {

        System.out.println("linc:" + msg);

        }

        public void printTwice(String msg)

        {

        for(int i =0;i<2;i++)

        {

        printOnce(msg);

        }

        }

        }

        好,下面就把这两个类打成jar包供自己调用。(不要纠结这两个类能干什么,主要是演示嘛)

       第一步,将其编译成class文件。如何编译,请看我的上一篇文章《Java编译那些事儿》

        [plain]

        D:workspaceJava est-jar2src>javac -d .  Print.java Log.java

        第二步,打成jar包。

        [plain]

        D:workspaceJava est-jar2src>jar -cvf Util.jar linc/util/*.class

        标明清单(manifest)

        增加:linc/util/Log.class(读入= 640) (写出= 375)(压缩了 41%)

        增加:linc/util/Print.class(读入= 684) (写出= 435)(压缩了 36%)

        O K !

        一个美丽的Util.jar放在你的面前了。

        那么,如何使用呢?

        下面我先写一个Test类来调用jar中的方法。

        [java]

        import linc.util.*;

        public class Test

        {

        public static void main(String args[])

        {

        Log log = new Log();

        log.info("Hello world!");

        Print print = new Print();

        print.printTwice("I am Linc!");

        }

        }

        让这个类和jar包一起编译(我把它们放在了一个路径下),

        [sql] view plaincopy

        D:workspaceJava est-jar2src>javac -cp Util.jar Test.java

        好了,可以运行了。

        [sql]

        D:workspaceJava est-jar2src>java Test

        Info:Hello world!

        linc:I am Linc!

        linc:I am Linc!

        发布程序(可执行程序)

        还是使用上述的print和log类,新写了Test类:

        [java]

        package linc.test;

        import javax.swing.JFrame;

        import linc.util.*;

        public class Test

        {

        public static void main(String args[])

        {

        Log log = new Log();

        log.info("Hello world!");

        Print print = new Print();

        print.printTwice("I am Linc!");

        JFrame jf = new JFrame();

        jf.setSize(250,250);

        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        jf.setVisible(true);

        }

        }

        把它们打包在一起,然后双击jar包能够运行程序。

        首先还是编译程序:

        [plain]

        D:workspaceJava est-jarsrc>javac -d . *.java

        下一步,打包:

        [plain]

        D:workspaceJava est-jarsrc>jar -cvf hi.jar linc/test/*.class linc/util/*.cla

        ss

        标明清单(manifest)

        增加:linc/test/A.class(读入= 189) (写出= 161)(压缩了 14%)

        增加:linc/test/B.class(读入= 189) (写出= 161)(压缩了 14%)

        增加:linc/test/C.class(读入= 189) (写出= 162)(压缩了 14%)

        增加:linc/test/D.class(读入= 189) (写出= 162)(压缩了 14%)

        增加:linc/test/Test.class(读入= 630) (写出= 456)(压缩了 27%)

        增加:linc/util/Log.class(读入= 640) (写出= 375)(压缩了 41%)

        增加:linc/util/Print.class(读入= 684) (写出= 435)(压缩了 36%)

        可以看到,这次打包与做框架时的jar包是一样,那么运行一下:

        [sql]

        D:workspaceJava est-jarsrc>java -jar hi.jar

        Failed to load Main-Class manifest attribute from

        hi.jar

        运行失败了,原因是我们没有指定Main-Class在MANIFEST.MF中。

        在当前路径新建一个无后缀的文件,如list,加入下面信息:

        [plain]

        Main-Class: linc.test.Test

        冒号后面有空格,结尾要回车。

        下面重新打包,加入m参数:

        [sql]

        D:workspaceJava est-jarsrc>jar -cvfm hi2.jar list linc/test/*.class linc/uti

        l/*.class

        标明清单(manifest)

        增加:linc/test/A.class(读入= 189) (写出= 161)(压缩了 14%)

        增加:linc/test/B.class(读入= 189) (写出= 161)(压缩了 14%)

        增加:linc/test/C.class(读入= 189) (写出= 162)(压缩了 14%)

        增加:linc/test/D.class(读入= 189) (写出= 162)(压缩了 14%)

        增加:linc/test/Test.class(读入= 630) (写出= 456)(压缩了 27%)

        增加:linc/util/Log.class(读入= 640) (写出= 375)(压缩了 41%)

        增加:linc/util/Print.class(读入= 684) (写出= 435)(压缩了 36%)

        先用命令行运行测试:

        [plain]

        D:workspaceJava est-jarsrc>java -jar hi2.jar

        Info:Hello world!

        linc:I am Linc!

        linc:I am Linc!

        成功,窗口也弹出。

        如果双击运行后不好用,那么就写个bat文件吧。

        run.bat

        [sql]

        java -jar hi2.jar

        双击run.bat后,程序顺利运行。

    疯狂Java培训(fkjava,org)的课程采用针对性培养,全面提升学员就业能力,重点加强训练职业素质。老师辛勤的讲解,让学员充分感受Java的魅力,充分激发每个学员对于编程的热爱,让学员在半年的时间内掌握8-10万的代码量,成为真正的技术高手,疯狂Java采用企业全真模拟开发训练,迅速积累项目经验。让学员迅速获得其他人需要花费两年才能获得的工作技能,无忧就业!

  • 相关阅读:
    float实例讲解
    Eclipse导出可执行Java工程/可执行Jar文件(包含第三方Jar包)
    eclipse sql server 导出excel文件
    sql server和eclipse连接代码
    sql server和eclipse连接问题
    sql server下载教程
    初识eclipse-java
    java下载和环境变量配置
    sql sever登录问题
    Makefile文件(DE1-soc软件实验”hello_word")
  • 原文地址:https://www.cnblogs.com/gojava/p/3154852.html
Copyright © 2011-2022 走看看