Ich habe es mit einem Maven-Skript zu tun, wo ich einige Dateiinhalte modifizieren muss. Ich verwende derzeit das Replacer-Plugin, das mir Probleme bereitet, wenn der Ersatzwert Dollarzeichen enthält.Maven Ersetzer: Ersatzwert mit Dollarzeichen
Der Ersatz Ich habe Probleme mit ist relativ einfach: in meinem log4j.xml, ersetzen Sie die Zeile <param name="File" value="wat.log" />
mit <param name="File" value="${FOO_BAR}/wat.log" />
Ich weiß, dass, wie das geschrieben, Maven ${FOO_BAR}
als Eigentum interpretieren würde. Ich schaute eine solution auf und versuchte es. Wenn ich nur ${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>
Das Ergebnis ist ein Fehler named capturing group is missing trailing '}'
. Wie ich es verstehe, verwendet das Plugin den üblichen Java-Regex-Ersatz, der Dollarzeichen und Curlies im Ersetzungstext zum Erfassen von Gruppen in der Regex interpretiert.
Ich habe ein paar andere Dinge versucht, und es scheint, dass der spezifische Fehler in diesem Fall auf den Unterstrich zurückzuführen ist. Wenn ich die Eigenschaft foo
in {FOOBAR}
ändere, ändert sich der Fehler: No group with name {FOOBAR}
.
habe ich versucht, ein paar anderen Dinge auch:
- die
foo
Eigenschaft{foo}
ändern, ich nicht einen Fehler, aber der Ersatz fällt die$
, also ichvalue="{foo}/wat.log"
- einen zweiten Ersatz vonfoo
mitFOO_BAR
funktioniert, aber ich immer noch die Dollar-Zeichen fehle - die Eigenschaft
{dollar}
Wechsel gibt mir einIllegal group reference
Fehler - den Dollar, Klammern Flucht und/oder i unterstreicht auf verschiedene Arten (z.B.
$$
,\$
,\\$
) brachte mich nicht weiter, auch nicht mit Unicode oder $ für das Dollarzeichen.
Gibt es einen Weg, um tatsächlich dieses Problem lösen mit Maven? Ich würde mich freuen, mehr Eigenschaften, mehr Ersetzungen oder ein völlig anderes Plugin zu verwenden.
Update: Ich arbeite an Windows - nicht sicher, ob/wie sich das auf die Ergebnisse auswirkt.
Ok, ich bin froh zu sehen, dass Ihr Problem gelöst wurde. Das Seltsame ist, dass dieser Parameter gemäß der Dokumentation steuert, ob das _token_ irgendwelche Regex-Zeichen enthält. – Daniel
Ja, aber es scheint, dass das mögliche Vorhandensein von Regexen im Token auch die Auswertung von Regex-Erfassungsgruppen in dem Wert auslöst, der die Ursache des Problems war. Also sind die Unterlagen etwas unklar. –