前言
之前我們?cè)?a target="_blank">聊聊如何進(jìn)行代碼混淆這篇文章提到丽已,在springboot項(xiàng)目使用allatori骏掀,有一個(gè)小坑。這個(gè)坑就是當(dāng)你在allatori.xml配置
<input>
<jar in="${project.build.finalName}.jar" out="${project.build.finalName}.jar"/>
</input>
${project.build.finalName}會(huì)當(dāng)成字符串輸出斥难,而不會(huì)解析占位符成榜。導(dǎo)致在打包的會(huì)報(bào)如下錯(cuò)
失效原因
這個(gè)是官網(wǎng)原話留拾,大意就如果你使用了spring-boot-starter-parent褐耳,則maven-resources-plugin只認(rèn)@
為啥只認(rèn)@胁孙,我貼下spring-boot-starter-parent pom的配置,大概大家就知道怎么回事了
修復(fù)方案
方案一:按官網(wǎng)的說(shuō)法菜枷,將${project.build.finalName}改成@project.build.finalName@
<input>
<jar in="@project.build.finalName@.jar" out="@project.build.finalName@.jar"/>
</input>
方案二:不直接引入spring-boot-starter-parent苍糠,而采用
dependencyManagement,占位符仍然為${project.build.finalName}
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
方案三:修改maven-resources-plugin的configuration
將useDefaultDelimiters設(shè)置true
示例:
方案四:在pom的 properties標(biāo)簽中啤誊,配置如下屬性
<properties>
<resource.delimiter>${}</resource.delimiter>
</properties>
總結(jié)
springboot使maven-resources-plugin占位符失效問(wèn)題的本質(zhì)原因岳瞭,就是springboot修改了原來(lái)maven-resources-plugin默認(rèn)的占位符。springboot為啥這么干蚊锹,他官網(wǎng)說(shuō)了原因
他的大意是防止配置中的任何 Spring 占位符(例如 ${foo})被構(gòu)建擴(kuò)展瞳筏。因此推薦還是用@
demo鏈接
https://github.com/lyb-geek/springboot-learning/tree/master/springboot-proguard