У меня есть некоторые системные свойства, которые я указываю из командной строки, например
mvn -Djdbc.url=... -Djdbc.user=... -Djdbc.password=... clean install
Вместо того, чтобы явно указывать каждый из командной строки, я бы хотел иметь жестко закодированный файл .properties
, который по умолчанию принимает эти значенияно я все равно могу переопределить их с помощью командной строки по мере необходимости.
Я знаю, что properties-maven-plugin
- это один из нескольких способов чтения свойств из файла, но как мне прочитать свойства и применить их в масштабе всей системы?Свойства, кажется, работают только при использовании внутри моего pom.xml
.Если у меня есть какой-нибудь другой файл конфигурации (например, файл конфигурации Hibernate), он не работает.
Пример:
В моем pom.xml
у меня есть
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>properties-maven-plugin</artifactId>
<version>1.0.0</version>
<executions>
<execution>
<goals>
<goal>set-system-properties</goal>
</goals>
<configuration>
<properties>
<!--
Alternatively this can read properties from a config file too
Hardcoded inline here for example purposes
-->
<property>
<jdbc.url>...</jdbc.url>
<jdbc.user>...</jdbc.user>
<jdbc.property>...</jdbc.property>
</property>
</properties>
</configuration>
</execution>
</executions>
</plugin>
Теперь я могу использовать свойства jdbc.*
в любом месте pom.xml
и даже при необходимости переопределять их из командной строки.
Но в моем конфигурационном файле Hibernate у меня есть
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">org.postgresql.Driver</property>
<property name="dialect">org.hibernate.dialect.PostgreSQL95Dialect</property>
<property name="connection.url">${jdbc.url}</property>
...
...
</session-factory>
</hibernate-configuration>
jdbc.url
и другие свойства отображаются здесь как пустые / пустые строки, потому что свойства, которые я читаю из файла, применяются только в моем pom.xml
.Однако, если я укажу его из командной строки, он будет работать здесь, поскольку он применяется для всего приложения.
Есть ли хороший способ прочитать свойства и применить их так, как они бы поступали из командной строки, для всего приложения?
Спасибо!