#spring #maven #spring-boot #plugins
#spring #maven #spring-boot #Плагины
Вопрос:
Я создаю приложение jar и использую maven-shade-plugin для его упаковки. В нем есть несколько файлов свойств, и я использую PropertyPlaceholderConfigurer для чтения свойств:
<bean id="configurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:/properties/core.properties</value>
</list>
</property>
</bean>
Потому что я хочу обновить свойства в файле гибко, поэтому я делаю это, чтобы исключить свойства при упаковке:
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*</include>
</includes>
<excludes>
<exclude>properties/core.properties</exclude>
</excludes>
</resource>
</resources>
После упаковки jar я создаю каталог свойств, содержащий core.properties, и помещаю его в тот же каталог, что и файл jar.
Когда я запускаю файл jar:
java -jar test.jar
Он может прочитать свойства в файлах core.properties.
Но если я создам приложение springboot и выполню те же шаги, но упакую с помощью spring-boot-maven-plugin. Затем запустите jar с той же командой:
java -jar test.jar
Произошла ошибка:
Caused by: java.io.FileNotFoundException: class path resource [application.properties] cannot be opened because it does not exist
at org.springframework.core.io.ClassPathResource.getInputStream(ClassPathResource.java:180)
at org.springframework.core.io.support.EncodedResource.getInputStream(EncodedResource.java:159)
at org.springframework.core.io.support.PropertiesLoaderUtils.fillProperties(PropertiesLoaderUtils.java:99)
at org.springframework.core.io.support.PropertiesLoaderUtils.fillProperties(PropertiesLoaderUtils.java:73)
at org.springframework.core.io.support.PropertiesLoaderUtils.loadProperties(PropertiesLoaderUtils.java:59)
at org.springframework.core.io.support.ResourcePropertySource.<init>(ResourcePropertySource.java:67)
Комментарии:
1.
properties
Каталог не является частью classpath и, следовательно,classpath:
префикс завершится ошибкой.2. @M.Deinum Это то, что я думал, но это работает при использовании плагина shade для упаковки, что меня смущает. Теперь похоже, что при использовании плагина shade каталог свойств является частью classpath, но при использовании плагина spring boot maven это не так. Но я не могу найти доказательства откуда-либо.
3. Это не должно быть частью classpath.