我正在處理Maven腳本,我必須修改某些文件內容。我目前正在使用替代品插件,當替換值包含美元符號時會給我帶來麻煩。Maven替代品:包含美元符號的替換值
替換我有問題,是比較簡單的:在我的log4j.xml,與<param name="File" value="${FOO_BAR}/wat.log" />
我知道,寫這樣的替換線<param name="File" value="wat.log" />
,Maven的將其解釋${FOO_BAR}
財產。我擡頭看了一眼solution並試了一下。當我剛用${FOO}
<properties>
<dollar>$</dollar>
<foo>{FOO_BAR}</foo>
<dollar.foo>${dollar}${foo}</dollar.foo>
</properties>
<build>
<plugins>
<plugin>
<groupId>com.google.code.maven-replacer-plugin</groupId>
<artifactId>replacer</artifactId>
<version>1.5.3</version>
<executions>
<execution>
<id>configure-logging</id>
<phase>prepare-package</phase>
<goals>
<goal>replace</goal>
</goals>
<configuration>
<includes>
<include>${my.configDir}/log4j.xml</include>
</includes>
<replacements>
<replacement>
<token>value="wat.log"</token>
<value>value="${dollar.foo}/wat.log"</value>
</replacement>
</replacements>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
結果是錯誤named capturing group is missing trailing '}'
。據我瞭解,該插件使用通常的Java正則表達式替換,該替換解釋了替換文本中的美元符號和曲線以捕獲正則表達式中的組。
我嘗試了一些其他的事情,看起來在這種情況下的具體錯誤是由於下劃線。如果我將foo
屬性更改爲{FOOBAR}
,則錯誤更改爲:No group with name {FOOBAR}
。
我嘗試了一些其他的東西,以及:
- 改變
foo
屬性{foo}
,我沒有得到一個錯誤,但更換滴$
,即我得到value="{foo}/wat.log"
- 第二更換foo
與FOO_BAR
的作品,但我還是很想念美元符號 - 改變屬性
{dollar}
給了我一個Illegal group reference
錯誤 - 逃離美元,括號和/或下劃線我n幾種不同的方式(例如,
$$
,\$
,\\$
)沒有帶給我任何進一步的信息,也沒有使用unicode或$作爲美元符號。
有沒有一種方法可以用Maven實際解決這個問題?我很樂意使用更多的屬性,更多的替代品或完全不同的插件。
更新:我在Windows上工作 - 不確定是否/如何影響結果。
好吧,我很高興看到你的問題得到解決。奇怪的是,根據文檔,該參數控制_token_是否包含任何正則表達式字符。 – Daniel
是的,但似乎令牌中可能存在的正則表達式也觸發了正則表達式捕獲組中的值作爲問題根源的評估。所以文檔有點不清楚。 –