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

栏目: 编程工具 · 发布时间: 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


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

查看所有标签

猜你喜欢:

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

Discrete Mathematics and Its Applications

Discrete Mathematics and Its Applications

Kenneth H Rosen / McGraw-Hill Science/Engineering/Math / 2003-04-22 / USD 132.81

Discrete Mathematics and its Applications is a focused introduction to the primary themes in a discrete mathematics course, as introduced through extensive applications, expansive discussion, and deta......一起来看看 《Discrete Mathematics and Its Applications》 这本书的介绍吧!

html转js在线工具
html转js在线工具

html转js在线工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具