Java jar命令 常见用法

一、jar命令作用:

进行打包 -- 把多个文件打包成一个压缩包 -- 这个压缩包和Winzip的压缩格式是一样的.

区别在于jar压缩的文件默认多一个META-INF的文件夹,该文件夹下包含一个Manifest.mf(清单文件)的文件

通常来说jar命令得到的压缩包有三种(压缩格式完全一样,只是后缀名不同而已):

A、*.jar - 它里面包含N个class文件。

B、*.war (web) - 它是一个web应用打包生成的。

C、*.ear(Enterprise) -它是一个企业应用打包生成的包

二、jar命令用法:

-c 创建新的归档文件

-t 列出归档目录和文件

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

-u 更新现有的归档文件

-v 在标准输出中生成详细输出 / 提供更详细输出信息

-f 指定归档文件名 / 为压缩包指定名字

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

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

指定应用程序入口点

-0 仅存储,不压缩,只是打包;不使用任何 ZIP 压缩

-M 不创建条目的清单文件 META-INF/MANIFEST.MF

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

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

1、创建压缩包

jar -cf mytest.jar *.class

//将当前目录下的*.class文件压缩到上一级目录的mytest.jar文件内

jar -cvf mytest.jar *.class

2、创建压缩包,不生成清单文件MANIFEST.MF 大写M

jar -cMf mytest.jar *.class

3、查看压缩包

jar -tf mytest.jar

jar -tvf mytest.jar

4、解压

jar -xf mytest.jar //解压到当前目录

jar -xvf mytest.jar 解压可看到详细的过程

5、更新压缩包

jar -uvf mytest.jar 要加入的指定class文件

为什么要制作jar包?

一个真实项目中,涉及到的class文件是非常多的。非常多的class文件存在以下问题:

a.系统管理不方便;

b.JVM要分开依次加载不同的*.class文件,效率很低,于是就可以把多个class文件打包成一个jar包,这样好处是:

①.多个class文件都统一成一个jar包方便管理;

②.JVM可以直接加载jar包就可以一次性加载N个类,效率更高

打包成可执行性jar包

通过 -e 选项 告诉系统哪个类是该jar包的主类

jar -cvfe mytest.jar UserTest *.class(指定的主类)

如果机器上安装了独立的虚拟机,只要双击“可执行性”的jar包即可执行

java -jar jar包名    -指定要执行的jar包

如果不需要生成清单文件MANIFEST.MF,可以直接使用WinRAR或Winzip来压缩(必须压缩成zip格式),解压也可如此

一。操作零散的单个或几个class文件

jar cvf ibstool.jar com/cn/ibs/TurnD.class com/cn/ibs/TurnB.class

二。把一个文件夹下面的所有class文件打成jar包

jar cvf ibstool.jar * 回车

生成可执行jar包:

编译的class文件中必须有main入口函数的类方能生成可执行jar包,如:

public static void main(String[] args)

生成的方法步骤:

方法一:

1。用上面的方法把class与相应的结构目录打成jar包

2。解压这个jar包到当前目录

3。编辑META-INF/MANIFEST.MF,给jar包指定程序入口main函数,内容为:

Manifest-Version: 1.0

Created-By: 1.5.0_06 (Sun Microsystems Inc.)

Main-Class: MutiThread (回车)

(注意回车与空格,这个文件的内容排版必须标准)

4。再用winzip把这些文件压缩成jar格式包,或者压成zip包,再改后缀名为jar也可。

方法二(推荐):

2. 打成可执行的jar包

cmd操作窗体中进入class文件的根目录,之所以说根目录,是因为下面其下面还可以有很多文件包(夹);

在此目录准备好一个manifest.mf文件,其内容为:

Manifest-Version: 1.0

Created-By: 1.5.0_06 (Sun Microsystems Inc.)

Main-Class: MainEntry

main-class为指定所有类的main方法所在的类名.

最后用命令: jar cvfm jarname.jar manifest.mf *

3.测试可执行jar包.

用命令:java -jar jarname.jar

4.为可执行jar包制作bat文件.

例如 :

@echo off

rem

rem Set BQ_IBS_HOME before running this script.

rem

if not "%BQ_IBS_HOME%" == "" goto CONT0

set BQ_IBS_HOME=c:\ibs

:CONT0

@echo on

java -DBQ_IBS_HOME=%BQ_IBS_HOME% -jar jarname.jar

:END

补充:

关于 MANIFEST.MF 写法.

例如我们打包的jar为 Test.jar

Manifest-Version: 1.0

Main-Class: windows.VideoWindow

Class-Path: lib\org.eclipse.swt_3.3.0.v3346.jar lib\org.eclipse.swt.win32.win32.x86_3.3.0.v3346.jar

上面为打包为jar中的包说明文件. 下面这个报错一直出现.

could not find main class. Program will exit

这个错误提示其实不是没有发现main class. 而是jar如果有错误执行不了,就会出现这个错误. 打包完成后, 要先运行 cmd -> java -jar

your.jar 确认没有问题即可执行jar. 使用-jar参数后, 系统的Classpath 变量不再起作用. 虚拟机将去MANIFEST.MF中的Class-Path 下找相

关的包.

然后才能成功的从: windows.VideoWindow 的main方法进入. 否则没有相关连接包,则会提示找不到main class. 而大家可能还迷糊的找不到北

. 明明有main class吗.

如果这个写的不对. 则就会一直报错.

看看上面这个Class-Path: 后面的写法. 空格分开. 绝对不能有分号.切记.

最后必须有换行. 这个也是要注意的. 否则依然提示没有mainclass.

不要因为这个小事情耽误了时间. 其中 lib/ 表示这个jar必须在打包Test.jar所在目录的一个lib子目录中.

运行jar需要命令: java -jar Test.jar

双击也可以, 则使用 javaw 打开.

关于java -classpath a.jar;b.jar; class test.Test 执行时. a.jar;b.jar; 后面都必须有分号. 否则报错. 不要指望不写classpath让系统

自己找. 这不是在eclipse里面.必须写上你要使用的类. 否则总会提示您编译出错.

可以用的上的有:

1. Main-Class 指定程序的入口,这样可以直接用java -jar xxx.jar来运行程序。

2. Class-Path 指定jar包的依赖关系,class loader会依据这个路径来搜索class。

我平时用mf文件一般说来都是让jar成为可以直接运行这一目的。虽然目的这么简单,但是每次打包还是很容易出现各种各样的问题让人头痛。

mf总是没有被应用,或者是出错了。

首先给出一个简单而标准的例子:

Manifest-Version: 1.0

Main-Class: ui.JFrameMain

Class-Path: jtds-1.2.jar c3p0-0.9.1.2.jar

esri_mo20.jar esri_mo20res.jar jsde83_sdk.jar

解释一下:

Manifest-Version mf文件版本号,这行照抄

Main-Class 包含main函数的类,程序的入口

Class-Path 用到的一些包

分析一下要点:

要点1:每行的“:”(冒号)用来分隔键值对。冒号后边一定要跟一个空格!!!

也就是说务必写为:

Main-Class:(空格)YouClassName

Class-Path:(空格)Class1.Jar

否则JBuilder会报("Manifest.mf": Error reading manifest: java.io.IOException: invalid header field

)这样的错。不再IDE帮助下做的JAR会发现MF没有起到应有的作用。顺便说一下以前我看到JBuilder报另一个个错大概说是什么换行符不对,好

像也是由于这个问题引发的。原先总以为是windows里边的回车是由回车,换行2个字符构成而造成的。现在看来好像不是这样,是因为少了冒

号后边那个空格。

要点2:Class-Path里边的内容用空格分隔而不是逗号或者分号。(唉。。。我总是下意识的用分号)

也就是说务必写成:

Class-Path:(空格)Class1.jar(空格)Class2.jar(空格)Class3.Jar

要点3:有的文章说MF文件每行不能超过七十多的字符,我的经验是如果在JBuilder里编辑MF超过了也无妨,一般我是尽量一行写完。续行挺麻

烦又要以空格开头什么的。我也经常直接用winRar打开jar然后直接编辑里边的mf文件,这是个好方法,很直接了当,缺点就是如果改坏了也不

会报错,只是MF有的部分失效了,好像运行时也会说"错误的MF文件版本"。

介绍几个技巧:

技巧1:使用winRar打开jar,双击MF文件,就可以编辑了,编辑完了Ctrl+S保存。特方便。也可以在外边写好一个Manifest.mf,然后直接拖入

覆盖以前的。

技巧2:写一个run.bat来运行你的jar。run.bat大体内容如下:

java -jar yours.jar

pause

后边加一个pause就可以让你看到具体哪里出错了,一般来说问题如果出在MF上,那么往往就是哪个包,哪个类没有找到的NoClassDef这种异常

java 命令 jar_Javajar命令常见用法相关推荐

  1. java中BigDecimal的常见用法

    2019-06-14 11:05:53 一.精度问题 二.加减乘除 三.大小比较 四.小数位数及四舍五入规则 五.mysql数据库 设计 精度问题: 示例1 问, 结果是多少? 0.01? No! 结 ...

  2. java中String的常见用法总结

    首先String不属于8种基本数据类型,String是一个对象. 因为对象的默认值是null,所以String的默认值也是null:但它又是一种特殊的对象,有其它对象没有的一些特性. 以下是关于str ...

  3. java字符串数组的常见用法

    public class string {public static void main(String[] args){//java数组初始化String[] strArray={"abc& ...

  4. Linux——find命令常见用法

    转自:http://www.cnblogs.com/wanqieddy/archive/2011/06/09/2076785.html Linux中find常见用法示例 ·find path -opt ...

  5. Perl命令行常见用法及技巧

    Perl命令行常见用法及技巧 作者:懒人运维 来源: 懒人运维   替换 将所有C程序中的foo替换成bar,旧文件备份成.bak perl -p -i.bak -e 's/\bfoo\b/bar/g ...

  6. netstat命令常见用法

    一.介绍 Netstat是控制台命令,是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表.实际的网络连接以及每一个网络接口设备的状态信息.Netstat用于显示与IP.TCP.UDP和ICM ...

  7. linux学习笔记:yum命令的常见用法

    要知道,不同的linux系统里软件包的命令可能是不同的. yum命令是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器. 例如: yum install -y net-too ...

  8. 【githubshare】Linux sed 命令行常用汇总:useful-sed,收集了 sed 命令行的诸多常见用法,可用于快速处理文本文件

    Linux sed 命令行常用汇总:useful-sed,收集了 sed 命令行的诸多常见用法,可用于快速处理文本文件. 仓库内提供了不少示例,如输出文件首行内容,正则匹配替换文本内容.删除空文件.删 ...

  9. dig命令命令常见用法

    dig命令命令常见用法 域名结构 dig命令命令常见用法 安装dig 查看本机使用的dns地址 使用dot或doh查询域名解析 查询A记录 查询dns所有记录值any 从ip地址反查询域名`dig - ...

最新文章

  1. Dockerfile实践优化建议
  2. ApacheBench-web性能测试
  3. 世界AI大会三马纵论:马云乐观、马斯克悲观,马化腾认为技术孤立主义有大危害...
  4. Matlab实用程序--图形应用-双y轴图形的绘制
  5. 美好生活从撸好代码开始
  6. YBTOJ洛谷P2839:最大中位数(主席树、二分答案)
  7. bvp解算器是什么_对数小史,以及为什么ln x的导数是1/x
  8. pandas 基本使用
  9. 15 —— npm —— package.json 与 package-lock.json 的作用
  10. springboot整合通用mapper操作数据库
  11. 在chrome-console中进行xpath/css/js定位
  12. oracle sap mas,MAS 移动业务整合系统
  13. 你应该知道的 CSS 基础知识
  14. python程序出现了异常会执行哪个语句,python中的异常是什么?应该怎么处理异常?...
  15. Drupal 紧急修复已遭利用的严重 0day
  16. 在VS2010中使用Git【图文】转
  17. css3之渐变背景色(linear-gradient)
  18. GetTickCount函数在linux下的实现
  19. C盘ProgramData变得巨大--VS2010在C盘下生成的.iTrace文件解决办法
  20. 推荐一个免费的论文查重检测软件PaperRight

热门文章

  1. pybind11使用教程笔记__4.3_binding STL containers -- opaque types
  2. 【Excel】日期格式
  3. 一文带你了解 Spark 架构设计与原理思想
  4. 很棒的一篇职业规划文章(1)
  5. 1. bootstrap概述
  6. 宇视EZStation云端分享单个摄像机教程
  7. 呼叫中心软电话不显示
  8. 华为HCIA或者HCIP的题库在哪找?
  9. sift matlab 代码学习网站
  10. Java顺序结构之基本数据类型转换