【问题标题】:@Controller not working when packaged in external jar@Controller 打包在外部 jar 中时不起作用
【发布时间】:2015-02-21 17:32:44
【问题描述】:

我有一个 Spring Web 应用程序,它接收一个外部 jar,其中包含一些在 packakge com.x.y.controller 中的注释控制器。

我在 spring-servlet.xml 的组件扫描路径中包含了 com.x.y.controller 包

<context:component-scan base-package="com.x.y.controller" />.

但是当我将应用程序部署到本地 tomcat 服务器时,我的外部 jar 中的那些控制器 bean 不会被创建。

但是,当我在构建应用程序时将 jar 提取到我的类路径中时(意味着将我的包完全扩展到我的 Web 应用程序类路径中),一切似乎都运行良好。这对我来说似乎很奇怪,因为我们在外部 jar 中也有一些带有 @component 注释的服务类。这些类似乎工作正常。

有谁知道这是否是春季的预期行为?还是我缺少一些配置让 spring 找到那些控制器?

目前在开发过程中,如果我更改了一个类,即使该类在外部 jar 中,更改也会反映到 tomcat 而不重建。如果我需要提取 jar 以使这些控制器工作,即使我重新启动服务器,tomcat 似乎也不会对这些控制器进行更改。需要重建以再次提取 jar 以使任何更改生效。这对发展来说将是非常痛苦的。我对春天比较陌生。如果我必须这样做,有人会看到解决方案吗?

【问题讨论】:

  • 你找到解决这个问题的方法了吗?如果是,请写一个答案。我也有同样的问题。
  • 我已经解决了这个问题。我添加了 ${CATALINA_BASE}/conf/Catalina/localhost/${APP_NAME}.xml 并在此文件中添加了应用程序类加载器。在 tomcat 8+ 中,这是 JarResources 属性,在 tomcat 小于 8 版本中,它是 Loader 属性。这是我的要点和额外的解释gist.github.com/durdyev/542dffb60beb30f5c6ce293418555ef7

标签: java spring spring-mvc


【解决方案1】:

确保 external.jar 存在于您的类路径中(通过添加到 maven 依赖项、eclipse 项目设置、使用 -cp jvm 命令行参数等),并且只需参考您在外部 .jar 中的类的包名想要加入。

并将&lt;context:annotation-config/&gt; 添加到您的 spring-servlet.xml

【讨论】:

  • 嗨 CHHIBI,external.jar 在我的 tomcat WEB-INF/lib 文件夹中。
  • @XueBin 这取决于你如何导出 JAR:stackoverflow.com/questions/1242656/… 并尝试将 添加到你的 spring-servlet.xml
  • external.jar 是一个 Maven 依赖项。我已经尝试添加 ,但它仍然不起作用。会不会是那些封装在 jar 中的控制器不在 Web 应用程序上下文中?
  • @XueBin 将此context-param 添加到您的web.xml &lt;context-param&gt; &lt;param-name&gt;contextConfigLocation&lt;/param-name&gt; &lt;param-value&gt;classpath: spring-servlet.xml&lt;/param-value&gt; &lt;/context-param&gt;
  • 您好 CHHIBI,感谢您的及时回复。我对项目进行了检查。上下文参数已正确设置。 spring-servlet.xml 已被读取。我用组件扫描在其中定义了其他包,它们都可以工作。只是那些封装在另一个模块中的控制器不起作用。我认为它与stackoverflow.com/questions/1242656/…有关。
猜你喜欢
  • 2014-09-10
  • 1970-01-01
  • 2012-11-04
  • 1970-01-01
  • 2017-01-21
  • 2014-09-22
  • 1970-01-01
  • 1970-01-01
  • 2020-10-03
相关资源
最近更新 更多