У меня есть класс, который использует следующий код:
@Value(value = "classpath:mail_template.html")
private Resource template;
В соответствии с этим руководством, это позволит мне получать данные из файла внутри моего jar-файла, используя template.getInputStream()
,Это работало корректно, пока еще один mail_template.html
не был добавлен в другой модуль.
Мое приложение имеет main_application
, у которого 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
Так что теперь мой класс использует mail_template.html
модуля_1 вместо того, который есть у меня внутри моего модуля.Как я понимаю, это правильное поведение, так как module_1 загружается первым, а @Value
вводится с первым найденным им 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
Как указано, каждый модуль объявляется как зависимость в Java-приложении Maven main_application
и каждое приложение Java Maven использует «базовый пакет» с именем модуля в качестве суффикса.
Например:
// 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" />
в файле конфигурации.