本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
转载自夜明的孤行灯
本文链接地址: https://www.huangyunkun.com/2016/09/08/gradle-uber-jar-cant-expand-zip/
有时候我们需要打包一个可独立运行的jar文件并分发出去,特别是桌面图形化程序。
Gradle要打这种包是很方便的,网上有很多例子,比如以下这个
jar { manifest { attributes "Main-Class": "$mainClassName" } from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } } }
又或者这样
task fatJar(type: Jar) { manifest { attributes "Main-Class": "$mainClassName" } baseName = project.name + '-all' from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } } with jar }
大部分情况都是可以直接这样解决的,但是我最近遇到一个问题,一直提示Can't Expand file。
来回头看看Gradle中的这段配置是怎样工作的。configurations.compile.collect包含了编译的所有依赖,然后对于其中的所有依赖,如果是目录就取出文件继续处理,如果是文件就解压,解压以后的东西会合并到最后的jar文件中。
有时候configurations.compile.collect也会替换成configurations.runtime.collect,不过这个不是引起问题的原因。
如果真的是jar,那么应该是可以解压的,但是Gradle中的依赖并没有强制指定为jar,它可以是pom,text等等各种文件。
我这里遇到的问题是依赖中有一个pom文件,自然是不能解压的,那么处理办法就很简单的。如果这种文件很多,那么需要在zipTree前做一个检查,不过我现在的情况很简单,只有一个pom文件,那么直接filter就行了
task fatJar(type: Jar, dependsOn: jar) { from configurations.runtime.filter { !it.path.endsWith('.pom') }.asFileTree.files.collect { zipTree(it) } }
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
转载自夜明的孤行灯
本文链接地址: https://www.huangyunkun.com/2016/09/08/gradle-uber-jar-cant-expand-zip/