Maven профили в пом
Я пытаюсь установить некоторые системные переменные окружения через maven, основываясь на профилях. Так что мой код пом
<profile>
<id>dev</id>
<activation>
<property>
<name>com.xxx.profile</name>
<value>dev</value>
</property>
</activation>
<properties>
<db-url>jdbc:postgresql://abc</db-url>
<db-username>xxx</db-username>
<db-pwd>yy</db-pwd>
</properties>
</profile>
Поэтому, когда я собираю проект, я делаю mvn clean install -Dcom.xxx.profile=dev
В коде у меня есть
String urlDB = System.getProperty("db-url");
String username = System.getProperty("db-username");
String password = System.getProperty("db-pwd");
Но когда я запускаю его, все эти переменные равны нулю.
System.getProperty ("com.xxx.profile") действительно дает правильный ответ....
Идеи?
1 ответ
Документация по профилям Maven гласит, что часть активации содержит условия для запуска профиля, например, в вашем случае системное свойство "com.xxx.profile" должно иметь значение "dev". Исходя из этого, вы можете сказать, что System.getProperty("com.xxx.profile") вернет правильное значение, так как это значение уже присутствует в вашей системе (поскольку профиль запущен).
Далее к аналогичному вопросу Использование тега свойств в профилях Maven. По сути, значения свойств, которые вы определяете, будут использоваться для замены ${propertiesKeys} в процессе фильтрации ресурсов. Поэтому, используя свойства, вы не определяете новые системные свойства. Обязательный параметр pom (где находятся файлы.properties, которые вы хотите проанализировать):
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
Пример файла свойств:
database.driverClassName=${database.driverClassName}
database.url=${database.url}
Хотя тогда вы не читали бы системное свойство, кроме файла свойств.
Свойства-Maven-плагин
Свойства-Maven-плагин Я думаю, это точно, что вы хотите. Проверьте "set-system-properties" внизу документации по использованию. Вы найдете код, который вы можете использовать вместе с вашими профилями. Вот пример:
<project>
<build>
<plugins>
<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>
<property>
<name>db-url</name>
<value>${db-url}</value>
</property>
</properties>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
<properties>
<env>dev</env>
</properties>
<profiles>
<profile>
<id>dev</id>
<properties>
<AppName>dev-${project.artifactId}</AppName>
<build.profile.id>dev</build.profile.id>
<spring.profiles.active>dev</spring.profiles.active>
<build.outputDirectory>target</build.outputDirectory>
<wildfly.plugin.clean>clean</wildfly.plugin.clean>
<wildfly.plugin.install>install</wildfly.plugin.install>
<env>dev</env>
</properties>
</profile>
<profile>
<id>sit</id>
<properties>
<AppName>sit-${project.artifactId}</AppName>
<build.profile.id>sit</build.profile.id>
<spring.profiles.active>sit</spring.profiles.active>
<build.outputDirectory>deployment/sit</build.outputDirectory>
<wildfly.plugin.clean>none</wildfly.plugin.clean>
<wildfly.plugin.install>none</wildfly.plugin.install>
<env>sit</env>
</properties>
</profile>
<profile>
<id>uat</id>
<properties>
<AppName>uat-${project.artifactId}</AppName>
<build.profile.id>uat</build.profile.id>
<spring.profiles.active>uat</spring.profiles.active>
<build.outputDirectory>deployment/uat</build.outputDirectory>
<wildfly.plugin.clean>none</wildfly.plugin.clean>
<wildfly.plugin.install>none</wildfly.plugin.install>
<env>uat</env>
</properties>
</profile>
<profile>
<id>prd</id>
<properties>
<AppName>prod-${project.artifactId}</AppName>
<build.profile.id>prd</build.profile.id>
<spring.profiles.active>prd</spring.profiles.active>
<build.outputDirectory>deployment/prd</build.outputDirectory>
<wildfly.plugin.clean>none</wildfly.plugin.clean>
<wildfly.plugin.install>none</wildfly.plugin.install>
<env>prd</env>
</properties>
</profile>
</profiles>
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<phase>generate-resources</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>**********************${build.profile.id} ** IS RUNNING</echo>
</tasks>
<tasks>
<echo>*********************${build.profile.id} **COPYING
PROPERTIES</echo>
<delete file="src/main/resources/application.properties" />
<delete file="src/main/resources/log4j2.xml" />
<copy
file="src/main/resources/${build.profile.id}/application.properties"
tofile="src/main/resources/application.properties" />
<copy file="src/main/resources/${build.profile.id}/log4j2.xml"
tofile="src/main/resources/log4j2.xml" />
</tasks>
</configuration>
</execution>
</executions>
</plugin>