maven編專案編譯後在target下的zip檔案損壞無法開啟

擊水三千里發表於2020-12-07

出現的問題

/resources/template/test.rar  專案編譯後在/target/classes/template/test.rar 下的zip檔案損壞無法開啟。經過對比配置排查發現是

<filtering>true</filtering>這條配置引起的問題

 

filtering的作用

maven的佔位符解析表示式的使用場合預設只在pom檔案範圍內活動

如果想擴大它的活動範圍,就必須指定需要擴大到哪些檔案,然後指定filtering=true.然後maven的佔位符解析表示式就可以用於它裡面的表示式解析了.

<build>
    <resources>
        <resource>
            <directory>${project.basedir}/src/main/resources</directory>
            <includes>
                <include>**/*.properties</include>
                <include>**/*.xml</include>
                <include>**/*.rar</include>
                <include>**/*.ftl</include>
            </includes>
            <filtering>true</filtering>
        </resource>
    </resources>
</build>

1. Spring EL表示式和MAVEN的佔位符表示式長得一樣,但兩者預設井水不犯河水,不能再Spring的範圍內取maven的引數

2. filtering的作用就是打通兩者的連線, 讓井水犯河水, 具體來說是讓Spring的範圍內能取到maven的引數

3. filtering的使用要配合resource一起使用: 前者開啟打通連線,後者指定打通的範圍.

舉例:

如果你的專案繼承了spring-boot-starter-parent,

如果想在application.properties中使用maven的佔位符以獲取maven的引數,此時就不能用${},

因為可能會與EL表示式衝突,

怎麼辦?此時parent依賴將maven佔位符表示式預設改為@var@的形式.  所以只能用@var@替代${var}

 

參考文章

https://www.cnblogs.com/wangxuejian/p/13551292.html

相關文章