【问题标题】:Remove a particular jar from plugin on creation of war in Grails在 Grails 中创建战争时从插件中删除特定的 jar
【发布时间】:2015-03-09 19:13:22
【问题描述】:

我在 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)

【问题讨论】:

    标签: grails grails-plugin dependency-management


    【解决方案1】:

    添加您的scripts/_Events.groovy:

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

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

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

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

    Excluding specific transitive dependencieshttp://grails.github.io/grails-doc/2.4.4/guide/conf.html#configurationsAndDependencies

    【讨论】:

    • 其实我已经试过了,这里是我的_Events.groovy,没用 includeTargets ant.delete(dir:"${stagingDir}/WEB-INF/lib/", 包括:"mysql-connector*.jar", verbose: true) } } setDefaultTarget(main)
    • 所以您自己编写一个插件并且您不想将其导出?在这种情况下,如果您只是 exclude BuildConfig 中的工件,它应该会更容易工作?
    • 不,我正在尝试从预先存在的插件中删除 jar。我已经用我的 _Events.groovy 代码更新了我的问题。
    • _Events 不是其他脚本。只需将上面的代码放在那里。没有 init 的东西和 main 等,或者至少这种语法对我的口味来说太复杂了,或者可能是旧 grails 版本的遗留物?
    • 猜测使用 IDE 生成的默认代码是个坏主意。只是说清楚了,谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-25
    • 2020-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多