Gradle jettyRun 的groovy-all加载冲突问题。

困扰很久的问题,在baidu无法找到解决方案,最近爬墙在google上找到解决方案,希望帮助到遇到这个问题的朋友。(不知道为何gfw要拦截docs.gradle.org 真是宁可错。。不可。。)

最近使用groovy开发web应用,使用gradle build。
官方jetty插件:apply plugin: 'jetty'
然后问题来了, gradle自身使用了2.3.6的groovy-all的模块,而jetty插件确实简单省事,没能新建进程跑jetty,所以和我们的web应用所需要的groovy环境有冲突。
报错:
Caused by: groovy.lang.GroovyRuntimeException: Conflicting module versions. Module [groovy-all is loaded in version 2.3.6 and you are trying to load version 2.2.2

解决方案有2个:
1. 修改build.gradle文件,在classpath里面排除掉groovy-all
[jettyRun,jettyRunWar]*.doFirst {
    contextPath = '/'
    reload = 'automatic'
    scanIntervalSeconds = 5

    // 解决jettyRun 加载groovy-all和gradle自带的groovy环境冲突的问题
    final FileCollection currentClasspath = classpath
    final FileCollection classpathWithoutGroovy = currentClasspath.filter {
        File f -> !f.name.contains('groovy-all')
    }
    classpath = classpathWithoutGroovy
}

2.使用更加强大的插件
https://plugins.gradle.org/plugin/org.akhikhl.gretty
http://akhikhl.github.io/gretty-doc/Getting-started.html
当然这个使用的是新进程启动jetty/tomcat.
功能很强大,可以研究一下。(热部署我用不成功,开发的不完善,非常耗内存,报outofmemory)

你可能感兴趣的:(java,gradle,groovy)