在 Grails 中创建 war 时从插件中删除特定的 jar

Remove a particular jar from plugin on creation of war in Grails

我在我的 Grails 2.2.4 应用程序中使用 dynamic-jasper:0.6,该插件当前正在导入旧版本的 mysql-connector mysql-connector -java-5.0.4-bin.jar 在某些情况下与我当前的连接器冲突并产生一些问题。我想继续使用插件而不修改它,但也排除特定的 jar 文件,只包含我需要的库。有什么办法可以实现吗?

我尝试从 _Events.groovy 中排除该文件,但它不起作用,这是我的代码

includeTargets << grailsScript("_GrailsInit")

target(main: "The description of the script goes here!") {
    eventCreateWarStart = { name, stagingDir ->
    ant.delete(dir:"${stagingDir}/WEB-INF/lib/", includes: "mysql-connector*.jar", verbose: true)
}
}

setDefaultTarget(main)

添加你的scripts/_Events.groovy:

eventCreateWarStart = { name, stagingDir ->
    ant.delete(dir:"${stagingDir}/WEB-INF/lib/", includes: "xercesImpl*.jar", verbose: true)
}

以上示例当然适用于xerces,只需根据自己的喜好更改includes: 掩码即可。如果您已经有闭包 eventCreateWarStart,只需添加 ant.delete 部分。

然而,对于 mysql-连接器,它很可能在您当前的项目中被引用为 runtime,您不妨尝试防止它从插件中渗入排除,例如(BuildConfig.groovy 例如 plugins 部分中的条目):

compile(":vaadin:7.3.9") { excludes 'xercesImpl' }

参见 http://grails.github.io/grails-doc/2.4.4/guide/conf.html#configurationsAndDependencies Excluding specific transitive dependencies