Java 之使用 jar 命令打包 您所在的位置:网站首页 java命令启动游戏 Java 之使用 jar 命令打包

Java 之使用 jar 命令打包

2023-09-13 06:55| 来源: 网络整理| 查看: 265

Java 之使用 jar 命令打包

为何打包(jar包)?为了项目的部署和发布,你的程序可能使用很多个类,把这些类和他们的目录一起压缩到一个文件中给别人,可以方便使用,通常在打包时候,会在里面加上部署的相关信息。打包实际上就是把代码和依赖的东西压缩在一起,变成后缀名为. jar包。

【jar命令和jar包(jar文件)

jar 命令(也称为jar工具)是随 JDK 安装的,在 JDK 安装目录下的 bin 目录中,Windows 下文件名为 jar.exe。可以使用jar命令创建、更新、提取和列出jar文件的内容。jar包(也称为jar文件),是Java中所特有一种压缩文档,其实大家就可以把它理解为.zip包,使用ZIP査看器(如WinZip)査看它。jar文件还包含META-INF目录,用于存储包和扩展配置数据,包括安全性版本控制、扩展和服务。 如果有很多.class文件(和其它文件),散落在各层目录中,肯定不便于管理。如果能把它们打一个jar包,变成一个文件,就方便多了。】

jar包和Manifest文件

jar包(文件)就是 Java Archive File(Java档案[归档]文件),是 Java 的一种文件格式,可将多个文件组合成一个文件。一个JAR文件由一系列采用Zip压缩格式的文件构成,同时还有一张“清单(Manifest)”,对所有这些文件进行了描述。JDK提供的许多类,也是以jar包的形式提供的。

jar包用于部署和封装库、组件和插件程序,并可被像编译器和 JVM 这样的工具直接使用。jar文件中有一个特定目录——META-INF,其中包含特殊的文件——MANIFEST.MF,用来定义扩展与档案打包相关数据信息,运行时向JVM提供应用程序的有关数据信息。

清单(Manifest)文件格式规则:

1.文件中的内容以键值对的形式出现,键值对之间采用"冒号和空格"进行分隔(注意:冒号后的空格必须有,不然格式有错误).

2.每行最多72个字符,换行继续必须以空格开头 。

3. Class-Path指定引用jar包的目录。调用多个jar时,每一个用空格(由一个或多个空格)隔开,不是逗号或分号,一行写不下(超过72个字符),从第二行开始,每行开头要至少一个空格。如:

Class-Path: lib/tools.jar lib/guava-r09.jar lib/guice-2.0.jar 

 lib/jakarta.commons.lang-2.2.jar

4. 文件的最后必需要空行,而且必须顶格。

更详细的说明,参考oracle提供的文档:http://docs.oracle.com/javase/1.5.0/docs/guide/jar/jar.html

一个简单的Manifest文件示例:

其中:

Manifest-Version

用来定义manifest文件的版本,例如:Manifest-Version: 1.0

Created-By

声明该文件的生成者,这行信息没什么用

Main-Class

定义jar文件的入口类,如果 JAR 文件被用作可执行的应用程序,那么应用程序需要告诉 Java 虚拟机入口点位置,任意包含 public static void main(String[] args) 方法的类即为入口点。该信息由文件头 Main-Class 提供,基本格式如下:

Main-Class: classname

classname值可由应用程序的入口点代替。

 

 jar 命令介绍

当我们安装好JDK,设置好path路径,就可以正常使用jar.exe命令打包了。

在cmd中,可以使用jar --help 或 ar -h 获取详细信息。

JDK9之后引入了模块化的概念,所以JDK9之后jar命令有了比较大的变化,下面JDK11中的jar命令的用法:

作为对照了解,给出JDK8中jar命令如下图:

更详细的说明,参考oracle提供的文档(其中的数字为版本号):

https://docs.oracle.com/javase/8/docs/technotes/tools/windows/jar.html#exampleshttps://docs.oracle.com/en/java/javase/11/tools/jar.htmlhttps://docs.oracle.com/en/java/javase/12/docs/specs/man/jar.html

使用 jar 命令打包,事先必须编译好需要打jar的class。(eclipse一般在bin,maven构建的在target/classes)

例1、将当前目录所有的.class文件都打入 counter.jar包: jar -cvf  counter.jar *.class

例2、将 bin 目录中的所有文件打入 counter.jar包: jar cvf counter.jar -C bin 

例3、打包,把manifest文件插入JAR文件使用 m 选项,把指定文件名的manifest文件传入(这里是预先准备好的myapplication.mf ),用jar命令如下 jar cvfm myapplication.jar myapplication.mf -C classdir

将 -C classdir指定的路径下的全部内容,生成名为myapplication.jar的包,并将清单文件myapplication.mf的内容提取到META-INF/MANIFEST.MF文件中

打包成可运行的jar包,可直接通过命令“java -jar jar文件名”运行这个jar包 或 用记事本编写一个批处理文件(扩展名为bat),内容为:java -jar pigGame.jar 如想不显示(隐藏)黑窗口运行jar,批处理命令文件内容为:@start javaw -jar  jar文件名运双击批处理文件即可运行jar文件了。

要打包成可运行的jar包,需要在MANIFEST.MF文件中使用Main-Class  指明 入口类(主类)。

附录

使用Eclipse导出向导生成jar包 可参见 https://blog.csdn.net/cnds123/article/details/80463293  



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有