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

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

内容简介: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


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

查看所有标签

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

Eloquent JavaScript

Eloquent JavaScript

Marijn Haverbeke / No Starch Press / 2011-2-3 / USD 29.95

Eloquent JavaScript is a guide to JavaScript that focuses on good programming techniques rather than offering a mish-mash of cut-and-paste effects. The author teaches you how to leverage JavaScript's......一起来看看 《Eloquent JavaScript》 这本书的介绍吧!

SHA 加密
SHA 加密

SHA 加密工具

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

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

HEX HSV 互换工具