【问题标题】:Maven profiles in pompom 中的 Maven 配置文件
【发布时间】:2016-06-27 02:29:57
【问题描述】:

我正在尝试根据配置文件通过 maven 设置一些系统环境变量。 所以我的 pom 代码是

<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") 确实给出了正确的答案......

想法?

【问题讨论】:

    标签: java maven-2 pom.xml profiles


    【解决方案1】:

    Maven profiles documentaion 声明激活部分包含触发配置文件的条件,例如对于您的情况,您需要系统属性“com.xxx.profile”具有值“dev”。基于此,您可以判断 System.getProperty("com.xxx.profile") 将返回正确,因为该值已经存在于您的系统中(因为触发了配置文件)。

    进一步类似的问题Using the properties tag within maven profiles。基本上,您定义的属性值将用于在过滤资源的过程中替换 ${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}
    

    虽然你不会读取系统属性,而是读取属性文件。

    properties-maven-plugin

    properties-maven-plugin 我想它确实是你想要的。查看使用文档底部的“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>
    

    【讨论】:

      【解决方案2】:
          <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>
      

      【讨论】:

      • 如果能包含一些解释就好了。仅仅粘贴一堆可能解决问题的代码是不够的。
      猜你喜欢
      • 1970-01-01
      • 2011-11-26
      • 2014-07-22
      • 2023-04-01
      • 2016-03-15
      • 2016-05-07
      • 2014-03-05
      • 1970-01-01
      • 2019-06-07
      相关资源
      最近更新 更多