Java魔法堂:打包知识点之jar

一、前言                                 

  通过eclipse导出jar包十分方便快捷,但作为码农岂能满足GUI的便捷呢?所以一起来CLI吧!

 

二、JAR包                              

  JAR包是基于ZIP文件格式,用于将多个.java文件和各种资源文件,或将多个.class和各种资源打包为一个文件。用于发布,部署,封装库、组件和插件程序,从而被编译器和JVM使用。

 

三、通过jar命令打包                          

  1. 格式 jar [option]* 文件名 

      必选选项(并且仅能选用其中一个)

       -c ,创建一个jar包

       -t ,显示jar包中的内容列表

     -x ,解压jar包

       -u ,添加文件到jar包

      可选选项

       -v ,生成详细报告,并输出到标准输出设备

       -m ,用于指定manifest.mf文件。(默认情况下会自动生成META-INF/MANIFEST.MF文件)

       -O ,创建jar包时不对内容进行压缩

       -M ,不自动产生manifest.mf文件

       -i ,创建jar包时创建META-INF/INDEX.LIST索引文件

       -C ,表示切换到指定目录来执行jar命令

       -f ,指定jar包的文件路径

   2. 常用示例

       示例的目录结构:

/
|-- src
|     |-- test.class
|-- META-INF
|     |-- MAINFEST.MF
|-- MAINFEST.MF
|-- other
      |--additional.class

      命令:

/* 1. 默认打包 */
// 生成的src.jar中就含src目录和jar自动生成的META-INF目录(内含MAINFEST.MF清单文件)
jar -cvf src.jar src

/* 2. 查看包内容(jar过大时就无法查看) */
jar -tvf src.jar

/* 3. 解压jar包 */
jar -xvf src.jar

/* 4. 提取jar包部分内容 */
jar -xvf src.jar src\test.class

/* 5. 追加内容到jar包 */
//追加MAINFEST.MF清单文件以外的文件,会追加整个目录结构
jar -uvf src.jar other\additional.class

//追加清单文件,会追加整个目录结构(src.jar会包含META-INF目录)
jar -uMvf src.jar META-INF\MAINFEST.MF

/* 6. 创建自定义MAINFEST.MF的jar包 */
jar -cMvf src.jar src META-INF

// 通过-m选项配置自定义MAINFEST.MF文件时,自定义MAINFEST.MF文件必须在位于工作目录下才可以
jar -cmvf MAINFEST.MF src.jar src

三、通过Eclipse导出jar                            

   在需导出的包、类上鼠标右键点击“Export”,然后选择“Java”下的“JAR file”,然后就是各种下一步就OK了。

 

 四、可执行的JAR包                            

    当jar包中包含可执行程序时,就可以通过 java -jar src.jar 命令来执行该可执行程序。打包的过程与上述操作无异,就是多了一步——配置META-INF/MAINFEST.MF文件。

    关于META-INF目录以及META-INF/MAINFEST.MF清单文件的内容,将在《Java魔法堂:打包知识点之META-INF/MAINFEST.MF》中探讨。

时间: 2024-08-17 10:16:43

Java魔法堂:打包知识点之jar的相关文章

Java魔法堂:类加载器入了个门

一.前言   <Java魔法堂:类加载机制入了个门>中提及整个类加载流程中只有加载阶段作为码农的我们可以入手干预,其余均由JVM处理.本文将记录加载阶段的核心组件--类加载器的相关信息,以便日后查阅.若有纰漏请大家指正,谢谢.   注意:以下内容基于JDK7和HotSpot VM.   二.类加载器种类及其关系 从上图可知Java主要有4种类加载器 1. Bootstrap ClassLoader(引导类加载器):作为JVM的一部分无法在应用程序中直接引用,由C/C++实现(其他JVM可能通过

Java魔法堂:打包知识点之META-INF/MAINFEST.MF(转)

一.前言 通过执行形如 jar -cvf src.jar src 命令将多个.class文件打包成JAR包时,你会发现JAR包中除了src目录外还多了个MATE-INF/MAINFEST.MF,那是为什么呢? 其实关于JAR包的描述信息.启动时的配置信息和安全性信息等均保存在META-INF下,因此了解META-INF目录对发布.部署十分重要的哦!下面仅为部分内容的整理,待日后深入实践后再补充完整.官方文档为:http://docs.oracle.com/javase/7/docs/techno

Java魔法堂:打包知识点之META-INF/MAINFEST.MF

一.前言        通过执行形如 jar -cvf src.jar src 命令将多个.class文件打包成JAR包时,你会发现JAR包中除了src目录外还多了个MATE-INF/MAINFEST.MF,那是为什么呢?    其实关于JAR包的描述信息.启动时的配置信息和安全性信息等均保存在META-INF下,因此了解META-INF目录对发布.部署十分重要的哦!下面 仅为部分内容的整理,待日后深入实践后再补充完整.官方文档为:http://docs.oracle.com/javase/7/

Java魔法堂:以Windows服务的形式运行Java程序

一.前言   由于防止维护人员误操作关闭Java控制台程序,因此决定将其改造为以Windows服务的形式运行.弄了一个上午总算搞定了,下面记录下来,以供日后查阅.   二.Java Service Wrapper   官网地址:http://wrapper.tanukisoftware.com/doc/english/download.jsp   JavaServiceWrapper以守护进程或windows服务的方式运行java程序.JSW提供四种方案改造原有项目,以实现守护进程或window

Java魔法堂:URI、URL(含URL Protocol Handler)和URN

一.前言   过去一直搞不清什么是URI什么是URL,现在是时候好好弄清楚它们了!本文作为学习笔记,以便日后查询,若有纰漏请大家指正!   二.从URI说起    1. 概念   URI(Uniform Resource Identifier,统一资源标识符)以字符串来表示某种资源的统一资源标识.   格式为: [scheme:]scheme-specific-part[#fragment]    [scheme:]组件 ,URI的名称空间标识.   scheme-specific-part组件

Java魔法堂:类加载机制入了个门

一.前言   当在CMD/SHELL中输入 $ java Main<CR><LF> 后,Main程序就开始运行了,但在运行之前总得先把Main.class及其所依赖的类加载到JVM中吧!本篇将记录这些日子对类加载机制的学习心得,以便日后查阅.若有纰漏请大家指正,谢谢!   以下内容均基于JDK7和HotSpot VM.   二.执行java的那刻     大家都知道通过java命令来启动JVM和运行应用程序,但实际的流程又是如何的呢?   1. 首先根据java后的运行模式配置项或

Java魔法堂:注解用法详解——@SuppressWarnings

一.前言   编码时我们总会发现如下变量未被使用的警告提示:   上述代码编译通过且可以运行,但每行前面的"感叹号"就严重阻碍了我们判断该行是否设置的断点了.这时我们可以在方法前添加 @SuppressWarnings("unused") 去除这些"感叹号".   二. @SuppressWarings注解    作用:用于抑制编译器产生警告信息.   示例1--抑制单类型的警告: @SuppressWarnings("unchecke

Java魔法堂:枚举类型详解

一.前言   Java的枚举类型相对C#来说具有更灵活可配置性,Java的枚举类型可以携带更多的信息. // C# enum MyColor{ RED = 0, BLUE = 1 } Console.Write(MyColor.RED); // Java enum MyColor{ RED("Hot", 4), BLUE("SAD",8); private String mood; public String getMood{ return mood; } priv

Java魔法堂:初探MessageFormat.format和ChoiceFormat

一.前言   刚开始从.net的转向java的时候总觉得 String.format 用得不习惯,希望格式模版会这样 {0}, this is {1}'s cat.{1},this is {0}'s dog. 而不是 %1$s,this is %2$s's cat.%2$s,this is %1$s's dog. .后来发现 java.text.MessageFormat.format 可以满足我这个小小的愿望.   二.静态方法 java.text.MessageFormat.format