内联第三方依赖到自己的包中

栏目: 编程工具 · 发布时间: 6年前

内容简介:Java世界一个很难绕过的问题就是依赖包,绝大部分项目总会或多或少的依赖第三方包。Maven或者Gradle等可以帮助我们轻松的管理第三方依赖,但是对于自己对外提供的包,特别是作为中间件或者基础组件等提供出去的包,还是会遇到一些第三方依赖的问题,主要有两个问题第一个情况可以先打一个fatjar,然后通过ProGuard精简代码。第二个情况就需要把第三方包的代码拷贝到自己的包中,在自己的代码中直接使用拷贝进来的三方包代码(pakcage name不一样),这样就可以最大程度保证稳定性。

Java世界一个很难绕过的问题就是依赖包,绝大部分项目总会或多或少的依赖第三方包。Maven或者Gradle等可以帮助我们轻松的管理第三方依赖,但是对于自己对外提供的包,特别是作为中间件或者基础组件等提供出去的包,还是会遇到一些第三方依赖的问题,主要有两个问题

  • 包依赖比较少,而且依赖第三方包中的极少部分代码
  • 一些关键依赖版本敏感,不希望使用方随意变更

第一个情况可以先打一个fatjar,然后通过ProGuard精简代码。

第二个情况就需要把第三方包的代码拷贝到自己的包中,在自己的代码中直接使用拷贝进来的三方包代码(pakcage name不一样),这样就可以最大程度保证稳定性。

当然大部分情况下对于第三方包的版本依赖没有那么敏感,上面说到的情况其实是大部分针对asm,cglib和objenesis等几个字节码增强的包。

具体的操作可以借助jarjar工具,先将三方包重新打包,然后修改Gradle的Jar任务,将重新打包后的jar复制到自己的包中。

task cglibRepackJar(type: Jar) { repackJar -> 	repackJar.baseName = "cglib-repack" 	repackJar.version = cglibVersion 	doLast() { 		project.ant { 			taskdef name: "jarjar", classname: "org.pantsbuild.jarjar.JarJarTask", 					classpath: configurations.jarjar.asPath 			jarjar(destfile: repackJar.archivePath) { 				configurations.cglib.each { originalJar -> 					zipfileset(src: originalJar) 				} 				// Repackage net.sf.cglib => com.huangyunkun.cglib 				rule(pattern: "net.sf.cglib.**", result: "com.huangyunkun.cglib.@1") 				// As mentioned above, transform cglib's internal asm dependencies from 				// org.objectweb.asm => com.huangyunkun.asm. Doing this counts on the 		
rule(pattern: "org.objectweb.asm.**", result: "com.huangyunkun.asm.@1") } } } }

然后修改Gradle的Jar任务配置

jar {
dependsOn cglibRepackJar
from(zipTree(cglibRepackJar.archivePath)) {
include "com/huangyunkun/cglib/**"
}
}

当然在具体打包的时候还可以根据需要exclude一些不需要的模块。

参考:https://github.com/shevek/jarjar


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

微服务设计

微服务设计

[英] Sam Newman / 崔力强、张 骏 / 人民邮电出版社 / 2016-5 / 69.00元

本书全面介绍了微服务的建模、集成、测试、部署和监控,通过一个虚构的公司讲解了如何建立微服务架构。主要内容包括认识微服务在保证系统设计与组织目标统一上的重要性,学会把服务集成到已有系统中,采用递增手段拆分单块大型应用,通过持续集成部署微服务,等等。一起来看看 《微服务设计》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具