2010-02-03 6 views
28

Tengo algunos archivos fuente java que usan un prefijo de paquete (están emulando algunas clases JDK). Yo uso estos archivos con el prefijo para ejecutar contra algunas pruebas unitarias. Si pasan las pruebas, quiero producir un archivo jar que contenga los archivos fuente pero con el prefijo del paquete eliminado de todos los archivos java.Búsqueda completa y reemplazo de cadenas en archivos fuente al copiar recursos

Estoy usando maven para compilaciones. ¿Alguien sabe de una manera de hacer esto? Esencialmente, lo que quiero es algo así como la función de filtrado de complementos de recursos, pero que hace una búsqueda y reemplazo adecuados (como: s/my.package.prefix .// g), en lugar de filtrar en $ {vars}.

Respuesta

23

Esto se puede resolver con el plugin antrun. En primer lugar las fuentes deben ser copiados en el directorio de destino, con:

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

En segundo lugar se utiliza el replace tarea del complemento antRun para reemplazar los archivos utilizando la Fase de preparación del paquete

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

Esto copiará los archivos fuente a destino/clases en la fase de recursos de proceso, realice una búsqueda y reemplace en los archivos en el directorio destino/clases en la fase de preparación del paquete y finalmente se agitarán en la fase del paquete.

+0

yo prefiero de esta manera ya que esto permitirá más fases de ejecución que se produzca, y permite trabajar en diferentes archivos por separado. – JayZee

+2

El reemplazo se realiza correctamente, pero el .java reemplazado no se compila y no está incluido en el paquete generado. Esto se debe a que aplica el complemento de reemplazo en la fase de preparación del paquete, cuando los archivos originales solo se han recopilado y aún se han compilado. ¡Debe aplicar esta solución en la fase de compilación, y funciona! – AntuanSoft

+0

Para hacer algo en los archivos Java, puedo recomendar [plantilla-maven-plugin] (http://www.mojohaus.org/templating-maven-plugin/) – khmarbaise

39

También puede utilizar

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

100% experto y hacer exactamente lo que quiere y más

+0

Independientemente de no ser aceptado, este es el "Maven Way". +1 –

+0

Bueno, yo no sería tan asertivo con el "Camino Maven". Este plugin parece en realidad demasiado parecido a un hermano antrun. De todos modos, crecer el pom.xml con fragmentos y fragmentos de configuraciones casi programáticas de XML definitivamente * no * es la manera más fácil. –

+1

El enlace da 404 y estoy teniendo problemas para buscarlo en Google. ¿Alguna idea de lo que sucedió con el complemento? –

Cuestiones relacionadas