2010-11-05 8 views
12

Escribí un pequeño script de BeanShell que reemplaza "__LINE__" con el número de línea real en el código fuente. Funciona bien en Ant.Filtrar el código fuente en Maven

Estoy buscando una forma de filtrar el código fuente en Maven para que mi script de BeanShell pueda generar un nuevo directorio de código fuente que luego se compile.

Sé sobre el filtrado de archivos de recursos. ¿Hay alguna facilidad similar para el código fuente?

Respuesta

19

El código fuente de filtrado todavía era complicado hace algunos meses, pero ahora hay un complemento estándar en el proyecto MOJO. Ahora puede hacer eso con una declaración de complemento clásica.

Para filtrar el código fuente (por ejemplo, cuando desea tener una constante en su código Java para recuperar la versión del proyecto o artifactId), ahora debería usar el templating-maven-plugin.

  1. Ponga su código que debe ser filtrada durante la construcción bajo src/main/java-templates como se haría normalmente bajo src/main/java de fuentes no filtradas. Use ${project.version} o cualquier propiedad que provenga del POM en su código.

  2. sólo hay que poner algo como:

    <plugin> 
        <groupId>org.codehaus.mojo</groupId> 
        <artifactId>templating-maven-plugin</artifactId> 
        <version>1.0-alpha-3</version> <!-- Be sure to use the last version. Check on the website's plugin --> 
        <executions> 
         <execution> 
         <id>filter-src</id> 
         <goals> 
          <goal>filter-sources</goal> 
         </goals> 
         </execution> 
        </executions> 
    </plugin> 
    
  3. hacerse :-). El código que coloca dentro de src/main/java-templates se filtra y se agrega a classpath.

El uso es muy sencillo (ver example here).

Esto respeta mucho mejor la idea de convención sobre la configuración de Maven. Básicamente estás reemplazando decenas de líneas XML y algunos hacks para hacer algo de manera limpia.

Nota al margen: esto funciona bien con Eclipse, por ejemplo.

+0

Hola, traté de seguir su respuesta anterior, pero cuando importo el proyecto a eclipse-kepler y habilito la compilación automática de eclipse, me queja de que no puede encontrar las clases en 'src/main/java-templates' src dir. ... también mirando la ruta de compilación de la fuente del proyecto, el directorio 'src/main/java-templates' src no está allí ... no estoy seguro si debería estar allí. Solo mencionar que el proyecto se compila con éxito cuando ejecuto 'mvn install' desde eclipse, pero quiero que eclipse no me queje y debe seleccionar automáticamente la fuente procesada de' target/generated-sources/java-templates' o quizás I ' ¿Estoy mal? –

+1

src/main/java-templates no es una carpeta de origen, y no debe configurarse como una dentro del IDE. Hacer esto chocará con el directorio filtrado target/generated-sources/java-templates (que debe mostrarse como una carpeta fuente en Eclipse, que no debe editar). –

+1

Para la actualización automática dentro de Eclipse, creo que le falta algo de configuración M2E, intente agregar https://gist.github.com/Batmat/9529785 en su pom.xml. Funciona mejor? –

Cuestiones relacionadas