2010-02-03 9 views
28

Ich habe einige Java-Quelldateien, die ein Paket-Präfix verwenden (sie emulieren einige JDK-Klassen). Ich benutze diese Dateien mit dem Präfix, um gegen einige Komponententests zu laufen. Wenn die Tests bestanden haben, möchte ich ein JAR erzeugen, das die Quelldateien enthält, aber das Paketpräfix aus allen Java-Dateien entfernt.Vollständige Suche und Ersetzen von Zeichenfolgen in Quelldateien beim Kopieren von Ressourcen

Ich benutze Maven für Builds. Kennt jemand einen Weg, dies zu tun? Im Wesentlichen möchte ich so etwas wie die Ressourcen-Plugin-Filterfunktion, die aber das Suchen und Ersetzen (wie: s/my.package.prefix .//g) statt Filtern nach $ {vars} durchführt.

Antwort

23

Dies kann mit dem antrun-Plugin gelöst werden. Zum einen müssen die Quellen in das Zielverzeichnis kopiert werden, mit:

<build> 
    ... 
    <resources> 
    <resource> 
     <directory>src/main/java</directory> 
     <includes> 
     <include>**/*.java</include> 
     </includes> 
    </resource> 
    </resources> 
    ... 
</build> 

Zweitens verwenden Sie die replace Aufgabe des antrun Plugin, um die Dateien zu ersetzen die Paket Phase

<build> 
    ... 
    <plugin> 
    <artifactId>maven-antrun-plugin</artifactId> 
    <executions> 
     <execution> 
     <phase>prepare-package</phase> 
     <configuration> 
      <tasks> 
      <replace token= "my.package.prefix." value="" dir="target/classes">         
       <include name="**/*.java"/> 
      </replace> 
      </tasks> 
     </configuration> 
     <goals> 
      <goal>run</goal> 
     </goals> 
     </execution> 
    </executions> 
    </plugin> 
    ... 
</build> 

Diese Vorbereitung mit kopiert Die Quelldateien für Ziel/Klassen in der Prozess-Ressourcen-Phase, Suchen und Ersetzen für die Dateien inplace im Verzeichnis target/classes in der prepare-package-Phase und schließlich werden sie in der Paketphase gestört.

+0

Ich bevorzuge diese Art und Weise, wie diese Phasen mehr Ausführung ermöglichen auftreten, und ermöglicht auf verschiedenen arbeiten Dateien separat. – JayZee

+2

Die Ersetzung ist korrekt, aber die ersetzte .java ist nicht kompiliert und nicht im generierten Paket enthalten. Dies liegt daran, dass Sie das Ersetzen-Plug-in in der Prepare-Paket-Phase anwenden, wenn Quelldateien nur gesammelt und noch kompiliert wurden. Sie müssen diese Lösung in der Kompilierphase anwenden, und es funktioniert !!! – AntuanSoft

+0

Für etwas in Java-Dateien kann ich [templating-maven-plugin] empfehlen (http://www.mojohaus.org/templating-maven-plugin/) – khmarbaise

39

Sie können auch

http://code.google.com/p/maven-replacer-plugin/

100% Maven verwenden und genau das tun, was Sie wollen und mehr

+0

Unabhängig davon, nicht akzeptiert zu werden, ist dies der "Maven Way". +1 –

+0

Nun, ich würde nicht so selbstbewusst über den "Maven Way" sein. Dieses Plugin scheint tatsächlich zu sehr wie ein Antrun-Bruder oder so zu sein. Wie auch immer, die pom.xml mit Chunks und Chunks von fast programmatischen XML-Konfigurationen zu vergrößern, ist definitiv nicht der richtige Weg. –

+1

Der Link gibt eine 404 und ich habe Probleme, es zu googeln. Irgendeine Idee, was mit dem Plugin passiert ist? –

Verwandte Themen