Ho a che fare con uno script Maven in cui devo modificare alcuni contenuti del file. Attualmente sto usando il plugin replacer, che mi dà problemi quando il valore di sostituzione contiene i simboli del dollaro.Maven replacer: valore di sostituzione contenente il simbolo del dollaro
La sostituzione ho problemi con è relativamente semplice: nel mio log4j.xml, sostituire la linea <param name="File" value="wat.log" />
con <param name="File" value="${FOO_BAR}/wat.log" />
So che, scritto così, Maven avrebbe interpretato ${FOO_BAR}
come proprietà. Ho cercato uno solution e l'ho provato. Quando mi basta usare ${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>
Il risultato è un errore named capturing group is missing trailing '}'
. A quanto ho capito, il plugin utilizza la solita sostituzione regex di Java che interpreta i segni del dollaro e le incurvature nel testo di sostituzione per catturare i gruppi nella regex.
Ho provato alcune altre cose e sembra che l'errore specifico in questo caso sia dovuto al trattino di sottolineatura. Se cambio la proprietà foo
su {FOOBAR}
, l'errore cambia: No group with name {FOOBAR}
.
ho provato un paio di altre cose:
- modificando la proprietà
foo
-{foo}
, non ottengo un errore, ma la sostituzione gocce del$
, cioè hovalue="{foo}/wat.log"
- una seconda sostituzione difoo
conFOO_BAR
opere, ma ho ancora mi manca il simbolo del dollaro - modificando la proprietà di
{dollar}
mi dà un erroreIllegal group reference
- fuga il dollaro, bretelle e/o i sottolinea n diversi modi (ad es.
$$
,\$
,\\$
) non mi ha portato oltre, né ha utilizzato l'unicode o $ per il simbolo del dollaro.
C'è un modo per risolvere questo con Maven? Sarei felice di usare più proprietà, più sostituzioni o un plugin completamente diverso.
Aggiornamento: Sto lavorando su Windows - non sono sicuro se/come influisce sui risultati.
Ok, sono lieto di vedere risolto il problema. La cosa strana è che secondo la documentazione, quel parametro controlla se il _token_ contiene caratteri regex. – Daniel
Sì, ma sembra che l'eventuale presenza di regex nel token inneschi anche la valutazione dei gruppi di cattura regex nel valore che era la fonte del problema. Quindi i documenti sono un po 'poco chiari su questo. –