2016-08-03 94 views
3

我按照字母顺序对build.gradle的依赖关系进行了重新排序,之后我很快注意到我的Spring应用程序不再正常工作(它在启动时暂停了消息java.lang.NoSuchMethodError: javax.servlet.ServletContext.getClassLoader())。如果我将底层依赖关系从中间移到顶端,那么以前一切正常。Gradle:依赖关系的顺序如何产生影响?

依赖性排序如何影响应用程序的运行方式?建议的顺序是什么?

+0

在相关说明中,使用Grails 3.3.1,如果在build.gradle中将这些行按字母顺序排列:apply plugin:“eclipse”|套用插件:“idea”|应用插件:“战争”|应用插件:“org.grails.grails-web”|应用插件:“asset-pipeline”|应用插件:“org.grails.grails-gsp”,然后将应用程序部署到Tomcat,它会失败,并显示以下消息:javax.servlet.ServletException:无法解析名称为'grailsDispatcherServlet'的servlet中名称为'/ index'的视图 –

回答

3

它对应用程序的类路径有影响。上面的依赖关系可能有一个较老版本的Servlet规范。这answer解释了为什么旧的Servlet规范发生此特定错误。

+0

这意味着顶层的依赖关系优先于下面的依赖关系?上下依赖关系的过渡依赖关系如何? –

+0

是的,匹配FQN的第一个类按类路径声明(使用依赖性顺序构建)的顺序加载。对于过渡依赖关系,它可能会添加到类路径中的父依赖关系之后。您应该增加日志记录以查看类路径(java命令行中的-cp选项)。 –