内容简介: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 therule(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
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- iframe内联框架之巧妙跨域
- 提升go编译器内联程度
- 智能合约基础语言(十):Solidity内联汇编
- 重学前端:块级元素与内联元素
- [译] Go语言inline内联的策略与限制
- [译] Go 语言 inline 内联的策略与限制
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
疯狂Java讲义(第4版)
李刚 / 电子工业出版社 / 2018-1 / 109
《疯狂Java讲义(第4版)》是《疯狂Java讲义》的第4版,第4版保持了前3版系统、全面、讲解浅显、细致的特性,全面新增介绍了Java 9的新特性。 《疯狂Java讲义(第4版)》深入介绍了Java编程的相关方面,《疯狂Java讲义(第4版)》内容覆盖了Java的基本语法结构、Java的面向对象特征、Java集合框架体系、Java泛型、异常处理、Java GUI编程、JDBC数据库编程、J......一起来看看 《疯狂Java讲义(第4版)》 这本书的介绍吧!