2015-11-12 19 views
6

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 ich value="{foo}/wat.log" - einen zweiten Ersatz von foo mit FOO_BAR funktioniert, aber ich immer noch die Dollar-Zeichen fehle
  • die Eigenschaft {dollar} Wechsel gibt mir ein Illegal 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.

Antwort

1

fand ich die Antwort selbst, für ein anderes Problem suchen, um Schrägstriche im Zusammenhang: <regex>false</regex> In der Konfiguration des replacer Plugin, dann wird die replacer ersetzen Sie einfach den Klartext es sieht und der ${dollar.foo} Trick funktioniert wie beabsichtigt:

+0

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

+0

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. –

7

Sie sind sehr nah dran. Nur stellen Sie vor den $ Charakter mit einer Flucht Backslash:

... 
<replacements> 
    <replacement> 
    <token>value="wat.log"</token> 
    <value>value="\${dollar.foo}/wat.log"</value> 
    </replacement> 
</replacements> 
... 

log4j.xml vor:

<param name="File" value="wat.log" /> 

log4j.xml nach:

<param name="File" value="${FOO_BAR}/wat.log" /> 

Es ist für mich gearbeitet.

+0

Nun, es hat nicht für mich funktioniert - wie ich geschrieben habe, habe ich versucht, so den Dollar zu entkommen –

+0

Ok, vielleicht fehlt mir hier etwas. Ich werde mein Projekt in Github einrichten, wenn ich nach Hause komme, um es dir anzuschauen. Ich melde mich bei dir. – Daniel

+0

Für was es wert ist, mein Beispiel ist verfügbar unter https://github.com/dr01g/maven-replace-example.git – Daniel

Verwandte Themen