1. 程式人生 > >java無法直接引用pom中定義的變數

java無法直接引用pom中定義的變數

maven佔位符類似於EL表示式,通過${}來獲取pom中定義的變數,這樣可以根據不同的部署環境,將對應的xml檔案中的變數進行替換(一般情況下,測試和開發環境引用的變數都是不一樣的,如果手動替換,這樣工作量會很大)。根據pom.xml中不同部署環境配置的變數,可以動態的將xml檔案中引用變數替換,也可以將Index頁面中引用的靜態檔案路徑動態變換(詳情見:);但是maven中定義的變數,無法直接在程式碼中獲取,需要定義在properties檔案中,然後將對應環境properties在pom中引入即可。

下面就java中環境變數獲取演示,程式碼如下:

1.properties檔案中環境變數定義

 

2.pom檔案中對應部署環境引入對應properties檔案

</build>
<profiles><!--部署環境-->
    <profile>
        <id>local</id><!--local環境-->
        <build>
            <resources>
                <resource>
                    <directory>src/main/profiles/local</directory><!--引入properties檔案地址-->
                </resource>
            </resources>
        </build>
        <properties>
            <profile.env>local</profile.env><!--變數,標識環境-->
            <log.root.level>INFO</log.root.level>
            <log.logger.level>DEBUG</log.logger.level>
            <log.console.level>INFO</log.console.level> 
        </properties>
    </profile>

<profile>
        <id>development</id><!--local環境-->
        <build>
            <resources>
                <resource>
                    <directory>src/main/profiles/development</directory><!--引入properties檔案地址-->
                </resource>
            </resources>
        </build>
        <properties>
            <profile.env>development</profile.env><!--變數,標識環境-->
            <log.root.level>INFO</log.root.level>
            <log.logger.level>DEBUG</log.logger.level>
            <log.console.level>INFO</log.console.level> 
        </properties>
    </profile>

<profile>
        <id>preview</id><!--local環境-->
        <build>
            <resources>
                <resource>
                    <directory>src/main/profiles/preview</directory><!--引入properties檔案地址-->
                </resource>
            </resources>
        </build>
        <properties>
            <profile.env>preview</profile.env><!--變數,標識環境-->
            <log.root.level>INFO</log.root.level>
            <log.logger.level>DEBUG</log.logger.level>
            <log.console.level>INFO</log.console.level> 
        </properties>
    </profile>
    <profile>
        <id>product</id><!--生產部署環境-->
        <build>
            <resources>
                <resource>
                    <directory>src/main/profiles/production</directory><!--引入properties檔案地址-->
                </resource>
            </resources>
        </build>
        <properties>
            <profile.env>product</profile.env><!--product-->
            <log.root.level>INFO</log.root.level>
            <log.logger.level>DEBUG</log.logger.level>
            <log.console.level>INFO</log.console.level>
           <!--相關佔位符變數配置,例如:xml中配置為${node.path},則pom進行如下配置-->
           <node.path>main.js</node.path>
        </properties>
    </profile>
</profiles>

3.在java程式碼中使用變數接收引數:

@Value("${profile.env}")//SpringEl表示式
private String env;

4.這樣就可以獲取到對應編譯環境的環境變數。