java - Spring 类路径资源被覆盖

标签 java spring maven

我有一个使用以下代码的类:

@Value(value = "classpath:mail_template.html")
private Resource template;

根据this教程这将允许我使用 template.getInputStream() 从我的 jar 文件内的文件中获取数据。这工作正常,直到另一个 mail_template.html已添加到另一个模块中。

我的应用程序有 main_application who 的 POM 具有其他模块作为依赖项。结构如下:

main_application
    |
    - modulue_1 (another module)
        |
        - src/main/java
        - src/main/resources
            |
            - mail_template.html
    - modulue_2 (my module)
        |
        - src/main/java
        - src/main/resources
            |
            - mail_template.html

所以现在我的类使用 module_1 的 mail_template.html而不是我模块中的那个。据我了解,这是正确的行为,因为 module_1 首先加载,并且 @Value被注入(inject)第一个 mail_template.html它找到了,但在我的情况下这是不正确的,因为它覆盖了 module_2(以及后续模块)中与 module_1 中具有相同名称的资源。

是否可以指定使用当前类(或模块)来查找 src/main/resources 中的资源@Value 目录中注解?或者我必须对每个模块中的每个资源进行唯一命名以避免此问题?

我尝试了许多不同的“classpath:”路线,包括:

@Value(value = "classpath:module_2/mail_template.html")
....
@Value(value = "classpath*:mail_template.html")
...
@Value(value = "classpath*:module_2/mail_template.html")

但是所有这些都会导致FileNotFoundException .

编辑

各模块组成如下:

Maven POM Project
    Maven Java Application
        src/main/java
            base.package.with.module.name.as.suffix.package
        src/main/resources
            resource_files_if_needed

如上所述,每个模块都在 Maven Java 应用程序下声明为依赖项 main_application每个 Maven Java 应用程序都使用一个“基础包”,并以模块名称作为后缀。

例如:

// main_application:
    package my.main.application
// module_1:
    package my.main.application.module1
// module_2:
    package my.main.application.module2

使用此属性,Spring 可以使用 @Component 加载类。使用 <context:component-scan base-package="my.main.application" /> 进行注释在配置文件中。

最佳答案

类路径中只能有一个 mail_template.html。对于具有相同包和类名的类也是如此。

我建议我们在资源目录中使用不同的目录名称。

关于java - Spring 类路径资源被覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56468642/

相关文章:

java - Mongodb文档格式一致性

java - spring 和 Vaadin 集成

java - 执行目标org.codehaus.mojo :findbugs-maven-plugin:3. 0.5的findbugs:findbugs失败:Java返回:1

java - 打包非模块化JavaFX应用程序

java - maven3-maven-antrun-插件- "failed to create task or type if"

java - 为什么 hadoop 输出文件 part-r-00000 是空的

java - Android-蓝牙。空指针

javax.faces.model.SelectItem 将值对象存储为字符串

java - Spring Boot中方法调用的标准输出重定向的另一种方式

mysql - bluemix 服务器在 MySQL 中给出 SQLGrammarException