将依赖的jar包inlining到另外一个jar包的ant插件

本文介绍JarJar工具如何帮助重新打包Java库并将其嵌入到自己的发行版中,以避免依赖冲突。通过具体示例展示了如何在Spring项目中使用JarJar将ASM和CGLIB库重新打包。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

https://code.google.com/p/jarjar/

 

Jar Jar Links is a utility that makes it easy to repackage Java libraries and embed them into your own distribution. This is useful for two reasons:

  • You can easily ship a single jar file with no external dependencies.
  • You can avoid problems where your library depends on a specific version of a library, which may conflict with the dependencies of another library.

spring中https://github.com/spring-projects/spring-framework/blob/3.2.x/build.gradle构建spring-core包,将asm和cglib包inling到spring-core包中。

         task asmRepackJar ( type: Jar ) { repackJar ->
                 repackJar . baseName = "spring-asm-repack"
                 repackJar . version = asmVersion
 
                 doLast () {
                         project . ant {
                                 taskdef name: "jarjar" , classname: "com.tonicsystems.jarjar.JarJarTask" ,
                                         classpath: configurations . jarjar . asPath
                                 jarjar ( destfile: repackJar . archivePath ) {
                                         configurations . asm . each { originalJar ->
                                                 zipfileset ( src: originalJar )
                                         }
                                         rule ( pattern: "org.objectweb.asm.**" , result: "org.springframework.asm.@1" )
                                 }
                         }
                 }
         }
 
         task cglibRepackJar ( type: Jar ) { repackJar ->
                 repackJar . baseName = "spring-cglib-repack"
                 repackJar . version = cglibVersion
 
                 doLast () {
                         project . ant {
                                 taskdef name: "jarjar" , classname: "com.tonicsystems.jarjar.JarJarTask" ,
                                         classpath: configurations . jarjar . asPath
                                 jarjar ( destfile: repackJar . archivePath ) {
                                         configurations . cglib . each { originalJar ->
                                                 zipfileset ( src: originalJar )
                                         }
                                         // repackage net.sf.cglib => org.springframework.cglib
                                         rule ( pattern: "net.sf.cglib.**" , result: "org.springframework.cglib.@1" )
                                         // as mentioned above, transform cglib"s internal asm dependencies from
                                         // org.objectweb.asm => org.springframework.asm. Doing this counts on the
                                         // the fact that Spring and cglib depend on the same version of asm!
                                         rule ( pattern: "org.objectweb.asm.**" , result: "org.springframework.asm.@1" )
                                 }
                         }
                 }
         }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值