java - 无法从外部 jar 文件加载 spring 配置 xml

标签 java spring spring-mvc spring-integration

我已经尝试过 stackoverflow 上写的解决方案,但没有一个解决了我的问题,对我来说可能会有所不同。

我有两个模块,“email-service”(jar)和“email-service-web”(war)包装模块。我使用 Maven,“email-service-web”导入“email-service”jar 文件。这按预期工作。

“email-service-web”WEB-INF 文件夹中的 web.xml 如下所示:

<servlet>
    <servlet-name>springServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            classpath*:/META-INF/spring/web-application-config.xml
        </param-value>
    </init-param>
</servlet>

<servlet-mapping>
    <servlet-name>springServlet</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>

web-application-config.xml 如下所示:

<import resource="classpath*:applicationContext-email-service-bootstrap.xml"/>
<import resource="classpath*:applicationContext-email-service-environment.xml"/>
<import resource="classpath*:applicationContext-email-service-process.xml"/>
<import resource="classpath*:applicationContext-email-service-integration.xml"/>

<context:component-scan base-package="com.company.emailservice"/>

IntelliJ 表示它可以找到 applicationContext-* 文件,但不将它们显示为红色。我已确认它们存在于 email-service.jar 文件中,并且该 jar 文件存在于展开的 email-service-web.war 文件的 lib 文件夹中。另外,我尝试了各种路径建议,如 classpath*:**/application*.xml 等,但没有任何反应。我的集成中有一个 HTTP 入站 channel 适配器,jetty 找不到它并给出 404。

Spring 部分没有启动,我应该从中获取日志垃圾邮件,但我没有。如果我将“电子邮件服务”转换为 war 打包项目,并将 webapp 结构移到那里,一切都会正常。

我做错了什么?

编辑:

建议不应涉及 WEB-INF,因此我移动了文件并更新了上面的问题。

此外,我的项目结构如下:

[email-service]
`--src
   `--main
      `--src
         |--java (classes)
         `--resources
            |--applicationContext-email-service-bootstrap.xml
            |--applicationContext-email-service-environment.xml
            |--applicationContext-email-service-process.xml
            `--applicationContext-email-service-integration.xml

[email-service-web]
`--src
   `--main
      |--src
      |  `--resources
      |     `--META-INF
      |        `--spring
      |           `--web-application-config.xml
      `--webapp
         `--WEB-INF
            `--web.xml

最佳答案

因此,正如 M. Deinum 提到的,WEB-INF 文件夹不在类路径中,这最终是我的问题。

花了一段时间才弄清楚,因为 HTTP 集成端点(HTTP 入站 channel 适配器)在前几次尝试中没有正确响应,但第三个和第四个请求确实按预期响应。

web-application-config.xml放入资源文件夹中确实解决了问题。

关于java - 无法从外部 jar 文件加载 spring 配置 xml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35205412/

相关文章:

java - 如何模拟 @InjectMocks 类中的方法?

java 错误 : class, 接口(interface),或预期的枚举(多进程包)

java - 如何在使用基于表单的 spring 安全性对 Java 应用程序进行身份验证后使用 Apache HttpClient 保留 cookie

java - 在独立 tomcat 上使用 Spring Boot 开发我的 REST 应用程序时获取 404

html - Css 资源在 jsp 中不可用

spring - 用于集成测试的不同日志文件

spring-mvc - Spring 中的 JSR 303 Bean 验证

java - 从资源加载时 GSON 出现 EOF 错误

java - 在 IntelliJ 中用接口(interface)替换抽象基类

java - android - ffmpeg 覆盖视频无法正常工作