我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Java打包工具jar包详解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Java打包工具jar包详解

Java打包工具是Java开发工具中比较常用的一种,代码重新打包工具jarjar可以帮助你将其它用到的java库打包并嵌入到你自己的项目jar包中。这样做的原因有:

当你发布项目的时候,把用到的库打包进现有项目jar包,可以让发布的这个jar包不比依赖于其它项目的jar包;

当你所用到的java库升级了以后,它所新发布的jar包可能和你现存的项目不匹配,为了保持项目的代码稳定性,你可以把编写代码时所用到的依赖jar包,全部打包进现在的项目jar包,以避免出现这个问题。

jarjar可以通过Ant任务的方式使用,也可以单独地在命令行下使用。打包代码时,如果你要重命名某些依赖包的名字的时候,jarjar会调用字节码转换(通过ASM)来更新代码,并自动做好其他工作。

以Ant任务的形式使用jar

我们现存的Ant任务里可以用jar任务来打包代码,比如:


<target name="jar" depends="compile">
    <jar jarfile="dist/example.jar">
        <fileset dir="build/main"/>
    </jar>
</target>

为了使用jarjar工具,我们创建一个叫jarjar的任务,由于JarJarTask是Ant标准任务Jar的子类,所以如果你不需要使用jarjar的特有功能的话,完全可以像这样调用jarjar工具:

就像标准的”jar”任务一样,可以通过”zipfileset”元素来包含其它jar包。但是仅仅包含其它jar包并不能让你远离“jar包陷阱”,因为你所依赖的jar包中的类名还是没有改变,仍然有可能和其它版本的jar包里的类名相同,产生冲突。

为了重命名类名,JarJarTask引入了一个新元素”rule”。”rule”包含了”pattern”属性,你可以通过这个属性,使用通配符来选择哪些类需要重命名,通过”result”属性可以设置如何给选中的类重命名。

在本例中我们希望引入一个叫jaxen.jar的库。并将所有以”org.jaxen”开头的类重命名以”org.example.jaxen”开头:


<target name="jar" depends="compile">
    <taskdef name="jarjar" classname="com.tonicsystems.jarjar.JarJarTask"
        classpath="lib/jarjar.jar"/>
    <jarjar jarfile="dist/example.jar">
        <fileset dir="build/main"/>
        <zipfileset class="lazy" data-src="lib/jaxen.jar"/>
        <rule pattern="org.jaxen.**" result="org.example.@1"/>
    </jarjar>
</target>

通配符**表示匹配循环所有的子包,如果你只希望匹配一个子包的话,可以使用*。

@1表示第一个**所匹配到的内容,一次类推,@2表示从左到右第二个所匹配到的*或**。@0是特殊的标志,它代表整个匹配到的类的全名。

命令行下单独使用jar

java -jar jarjar.jar [help]

打印帮助信息。

java -jar jarjar.jar strings

打印类路径classpath下的字符串信息,如果类中有debug信息的话,会打印出所在行的行号。

比如java -jar jarjar.jar strings servlet-api.jar会打印:

...
javax.servlet.http.HttpServletRequest
"BASIC"
"FORM"
"CLIENT_CERT"
"DIGEST"
javax.servlet.http.HttpUtils
"javax.servlet.http.LocalStrings"
88: "javax.servlet.http.LocalStrings"
339: "://"
341: "http"
341: "https"
145: "&amp;"
238: "err.io.short_read"
254: "8859_1"
...

java -jar jarjar.jar find []

打印出类路径下java类对类路径下类的依赖,如果省略了,那么用代替。只能取class或者jar,前者代表打印各个类之间的依赖情况,后者会打印包对包之间的依赖。

java -jar jarjar.jar process

将按照文件所指定的方法转换到里,中原有的类将被删除。

文件的写法下面将会提到。

类路径Classpath的格式

类路径classpath是用逗号或分号(具体是那种分隔符依赖操作系统)隔开的一组目录,jar包或者zip包。详细说明请看classpath的java doc。也可以使用通配符的方式来书写classpath:http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6268383。

Rules规则文件格式

Rules规则文件是实际上一种文本文件,每一行代表一条规则Rule,行首和行末的空格会被忽略掉,有三种不同样式的Rule写法:


rule <pattern> <result>
zap <pattern>
keep <pattern>

第一个是用来设置jar如何重命名类文件的。所有类,只要它引用到了需要改变名字的类,其相关内容就会被自动同步改变,保证不会出现引用错误。如果一个类匹配了不同的rule,只有第一个匹配的rule会生效。 和的设定同上面讲过的Ant中一样。

zap规则中 所匹配的类将会不加入生成的新jar包。

到此这篇关于Java打包工具jar包详解的文章就介绍到这了,更多相关Java打包工具jar包内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Java打包工具jar包详解

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Java之Maven工程打包jar

Maven打包一般可以生成两种包一种是可以直接运行的包,一种是依赖包(只是编译包)。Maven默认打包时jar,如果需要修改其他类型,可以修改pom.xml。感兴趣的同学可以参考阅读
2023-05-14

Android rom解包打包工具

eMMC主要是针对手机和平板电脑等产品的内嵌式存储器,由于其在封装中集成了一个控制器,且提供标准接口并管理闪存等优势,越来越受到Android手机厂商的青睐,以eMMC为存储设备的android手机,其文件系统(system、data分区)
2022-06-06

java中如何打包成jar包

一、手动打包可直接执行的jar包1)先使用javac编译java文件,得到class文件;2)新建文件,名字任起,比如可以叫manifest,内容如下(注意:1. 冒号后面加一个空格,2. 最后必须回车到新的空行,否则出错,如下面内容就必须在addJarPkg
java中如何打包成jar包
2022-02-12

Java中Maven的打包方式和执行jar详解

这篇文章主要介绍了Java中maven的打包方式和执行jar,文中有详细的代码示例,有需要的朋友可以借鉴一下
2023-05-18

HttpClient jar包使用详解

HttpClient是一个开源的HTTP客户端工具包,用来进行HTTP通信。它可以用来发送HTTP请求和接收HTTP响应,支持HTTP/1.1和HTTP/2协议,并提供了许多高级功能,如重定向、代理、认证、cookie管理等。使用HttpC
2023-09-15

Linux打包和压缩工具的使用详解

压缩工具:gzip,bzip2 压缩能力逐渐增强 打包或压缩工具:tar 打包并压缩工具:zip 压缩能力比gzip和bzip2都强gzip和bzip2这两种压缩工具的区别: gzip和bzip2只能压缩文件,zip可以压缩文件和目录bzi
2022-06-04

maven工程打包引入本地jar包的实现

本文详细介绍了如何在Maven工程中引入本地JAR包,提供了两种方法:使用Maveninstall或Maveninstall:install-file。其中包括pom.xml依赖声明的详细信息和需要注意的事项。引入本地JAR包时,应确保其兼容性,并考虑依赖关系。
maven工程打包引入本地jar包的实现
2024-04-02

怎么将java或javaweb项目打包为jar包或war包

这篇文章主要介绍“怎么将java或javaweb项目打包为jar包或war包”,在日常操作中,相信很多人在怎么将java或javaweb项目打包为jar包或war包问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答
2023-07-02

详解node中的包和包管理工具

本篇文章带大家深度解析一下node的包和强大的包管理工具,希望对大家有所帮助!
2022-11-24

SpringBoot项目打jar包与war包的详细步骤

SpringBoot和我们之前学习的web应用程序不一样,其本质上是一个Java应用程序,那么又如何部署呢?这篇文章主要给大家介绍了关于SpringBoot项目打jar包与war包的详细步骤,需要的朋友可以参考下
2023-02-24

如何在 Idea 中将 Java 项目打成 Jar 包?(idea怎么把java项目打成jar包)

在Java开发过程中,将项目打成Jar包是一个常见的操作,它可以方便地将项目部署到其他环境中。本文将以IntelliJIDEA为例,介绍如何将Java项目打成Jar包。一、准备工作确保已经安装了
如何在 Idea 中将 Java 项目打成 Jar 包?(idea怎么把java项目打成jar包)
ideaJava2024-12-13

Java之Maven工程打包jar的方法是什么

这篇文章主要介绍“Java之Maven工程打包jar的方法是什么”,在日常操作中,相信很多人在Java之Maven工程打包jar的方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java之Maven工
2023-07-05

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录