一部のファイルの内容を変更する必要がある Maven スクリプトを扱っています。現在、replacer プラグインを使用していますが、置換値にドル記号が含まれていると問題が発生します。
私が問題を抱えている置換は比較的単純です。私のlog4j.xmlで、行<param name="File" value="wat.log" />
を次のように置き換えます<param name="File" value="${FOO_BAR}/wat.log" />
そのように書かれていると、Mavenは${FOO_BAR}
プロパティとして解釈することを私は知っています。解決策を調べて試してみました。ちょうど使うとき${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
- ドル記号、中括弧、および/またはアンダースコアをいくつかの異なる方法 (例:
$$
、\$
、\\$
) でエスケープしても、ドル記号に Unicode や $ を使用しても、それ以上のことはできませんでした。
Mavenでこれを実際に解決する方法はありますか? より多くのプロパティ、より多くの置換、またはまったく異なるプラグインを使用できれば幸いです。
更新:私は Windows で作業しています - それが結果に影響するかどうか、またはどのように影響するかはわかりません。