2017-09-05 105 views
0

Grails 3.2.5。的build.gradle具有郵件插件:如何從war文件中排除grails插件jar

compile "org.grails.plugins:mail:2.0.0.RC6" 

在部署戰到生產,我需要從WEB-INF/lib目錄中刪除javax.mail-1.5.6.jar因爲這罐子必須在Tomcat的lib使用時一個JNDI郵件資源。那麼,如何保留郵件插件,但從戰爭中刪除有問題的jar文件?我知道如何在Grails 2.x中做到這一點。通過build.gradle中的gradle war任務,我試圖排除該文件(不起作用 - jar以某種方式從插件中漂移而來),並試圖將文件過濾掉。當我構建戰爭時,我得到兩個文件 - 「app-0.1.war」和「app-0.1.war.original」。 「原始」文件已經過濾了WEB-INF/lib/javax.mail jar,但真正的完整的戰爭仍然存在。

那麼如何防止插件jar進入war文件呢?謝謝。

回答

0

一種方式做到這一點是這樣的:

war { 
    rootSpec.exclude '**/javax.mail*.jar' 
} 

(您可能需要根據您是否也想排除javax.mail-api jar文件與javax.mail罐子一起調整)

請參閱https://github.com/jeffbrown/excludejar/blob/67734ac0c65cdbead468f1e65bcfc29041cd2279/build.gradle#L70-L72

+0

啊,我的問題似乎是「grails戰爭」(即「grails彙編」)添加bootRepackage和彙編任務。這些操作忽略了libs的rootSpec.exclude動作,因爲它構建了一個可運行的jar(war)。對於Tomcat部署,它看起來像我需要執行「gradle war」,或者只是使用由「grails assemble」命令創建的「原始」版本的戰爭。 – Jay

+0

我會用'gradlew assemble'。如果安裝了'War' Gradle插件,'assemble'任務會創建一個'.war'文件,否則它會創建一個可執行的'.jar'文件。當我在項目之間來回切換時,我不必記住哪些使用'.war',哪個使用'.jar'。我只是運行'assemble',發生了正確的事情。 –

+0

如果你在上面的答案中鏈接的項目中運行'./gradlew assemble',你會發現它可以工作。 –