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>
Другие вопросы по тегам