今天用Gradle跑一个项目出了个错误,以前都是用ant跑的
症状如下:Build的时候很正常,但是Run的时候提示
Exception in thread “main” java.lang.SecurityException: Invalid signature file digest for Manifest main attributes
初看起来是签名不符合,猜想可能是gradle和ant的包不一样
于是搜索了一下症状:
Stackoveflow : invalid signature
看完了上面的讨论我理解是 因为Gradle把所有dependency都打包到了一起,所以不同版本的包可能会冲突
然后Justin来看了一下,立刻指出
其实这个原因是因为签名冲突,一些SF、RSA文件重复了,而我们的项目其实不需要用到这些文件
跟上面的这个问题基本上道理是一样的。
于是我去改了一下项目目录下的gradle.build文件
用这位仁兄的做法,就在runtime.collect这句话后面加三句exclude就行了
from {configurations.runtime.collect {zipTree(it)}} //
{
exclude "META-INF/*.SF"
exclude "META-INF/*.DSA"
exclude "META-INF/*.RSA"
}
每个人的具体情况可能不一样,不过我这么做就可以解决问题了。
版权声明:本文为lkitbontb原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。