【问题标题】:Gradle: how does order of dependencies make a difference?Gradle:依赖顺序如何产生影响?
【发布时间】:2016-12-09 12:26:13
【问题描述】:

我按字母顺序重新排列了 build.gradle 中的依赖项,之后我很快注意到我的 Spring 应用程序不再正常工作(它在启动时停止并显示消息 java.lang.NoSuchMethodError: javax.servlet.ServletContext.getClassLoader())。如果我将 undertow 依赖项从中间移到顶部,那么一切都像以前一样正常。

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

【问题讨论】:

  • 在相关说明中,使用 Grails 3.3.1,如果您在 build.gradle 中按字母顺序排列这些行:apply plugin: "eclipse" |应用插件:“想法”|应用插件:“战争”|应用插件:“org.grails.grails-web”|应用插件:“资产管道”|应用插件:“org.grails.grails-gsp”然后将应用程序部署到Tomcat,它失败并显示消息:javax.servlet.ServletException:无法解析名称为“grailsDispatcherServlet”的servlet中名称为“/index”的视图跨度>

标签: java spring gradle undertow


【解决方案1】:

它对应用程序的类路径有影响。在底层依赖之上可能有一个旧版本的 Servlet 规范。这个answer 解释了为什么旧的 Servlet 规范会出现这个特定错误。

【讨论】:

  • 这是否意味着顶部的依赖项优先于下面的依赖项?上下依赖的过渡依赖是什么情况?
  • 是的,第一个匹配 FQN 的类是按照类路径声明的顺序加载的(使用依赖顺序构建)。对于过渡依赖,它可能是在类路径中的父依赖之后添加的。您应该增加日志记录以查看类路径(java 命令行中的 -cp 选项)。
猜你喜欢
  • 2012-04-18
  • 1970-01-01
  • 1970-01-01
  • 2010-12-29
  • 1970-01-01
  • 1970-01-01
  • 2015-03-31
  • 2012-09-25
  • 2013-10-01
相关资源
最近更新 更多