2016-03-25 56 views
1

由於Gradle在tomcat中無法加載,因爲特定於簽名Jar的安全性異常,所以我們遇到了一個問題。堆棧跟蹤沒有顯示什麼jar引起的問題,並得到這個東西運行我想知道如果我可以排除在構建中的簽名,當戰爭建成但不知道如何用Gradle做到這一點。在maven中我相信這將是一個<filter><exclude>標籤,但不確定這種類型的東西是否可用於Gradle。任何輸入將不勝感激,異常被拋出如下。刪除Gradle Build中的Jar簽名

Caused by: java.lang.SecurityException: Invalid signature file digest for 
+1

當你引用'jar'時,你指的是第三方庫,還是你自己的Gradle構建期間生成的jar? – pczeus

+1

另外,你是如何建立戰爭?你是通過複製罐子等手動進行的,然後創建戰爭,還是使用像'war'插件這樣的插件? – pczeus

回答

1

要確定jar文件是否已簽名,可以使用任何zip實用工具解壓縮jar文件。如果jar被簽名,它將在META-INF文件夾下包含諸如* .RSA,*。SF或* .DSA的文件。

要在Gradle構建中排除這些簽名文件,我在build.gradle中執行了以下操作。如果您使用任何其他插件來創建jar,則應該檢查該插件文檔以獲取更多詳細信息。

jar { 
from { (configurations.runtime).collect { it.isDirectory() ? it : zipTree(it) } } { 
    exclude 'META-INF/*.RSA', 'META-INF/*.SF', 'META-INF/*.DSA' 
} 
manifest { 
    attributes("Main-Class": "com.nk.social.shareit.streams.AppMain") 
}} 

我的整個的build.gradle文件,列出如下: -

apply plugin: 'scala' 

dependencies { 
    compile group: 'org.apache.kafka', name: 'kafka-streams', version: '0.11.0.1' 
    compile 'org.scala-lang:scala-library:2.12.2' 
    compile 'com.sksamuel.elastic4s:elastic4s-core_2.12:5.4.2' 
    compile 'com.sksamuel.elastic4s:elastic4s-http_2.12:5.4.2' 
    compile 'org.apache.lucene:lucene-core:6.5.1' 
    compile 'joda-time:joda-time:2.9.9' 
    testCompile group: 'org.scalatest', name: 'scalatest_2.12', version: '3.0.4' 
} 


jar { 
    from { (configurations.runtime).collect { it.isDirectory() ? it : zipTree(it) } } { 
     exclude 'META-INF/*.RSA', 'META-INF/*.SF', 'META-INF/*.DSA' 
    } 
    manifest { 
     attributes("Main-Class": "com.nk.social.shareit.streams.AppMain") 
    } 
} 

希望這有助於。