今天用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"
}
每個人的具體情況可能不一樣,不過我這麼做就可以解決問題了。