2017-09-05 98 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',你会发现它可以工作。 –

相关问题