2012-06-15 10 views
17

Quiero compilar solo los archivos o directorios seleccionados (incluidos los subdirectorios) dentro del directorio de origen. Estaba bastante seguro de poder hacerlo usando la configuración <includes> de maven-compiler-plugin, pero parece que no funciona como esperaba, ya que todavía compila todas las clases en target/classes. Lo que es realmente extraño, salida de Maven sugieren que el ajuste en realidad hace su trabajo, porque con:Compilación solo de archivos seleccionados en Maven

<plugin> 
    <artifactId>maven-compiler-plugin</artifactId> 
    <version>2.5.1</version> 
    <configuration> 
     <includes> 
     <include>com/example/dao/bean/*.java</include> 
     </includes> 
    </configuration> 
    </plugin> 

tengo:

[INFO] Compiling 1 source file to c:\Projects\test\target\classes 

pero con la configuración de ningún compilador que tengo:

[INFO] Compiling 14 source file to c:\Projects\test\target\classes 

En ambos casos, sin embargo, las 14 clases se compilan en target/classes como mencioné. ¿Puedes explicarlo o sugerir otra solución para compilar solo los archivos seleccionados?

+0

¿Recordó hacer una limpieza antes de probarla? – artbristol

+0

¿Has intentado excluir **/* antes? Supongo que por defecto maven incluye todo y tienes que excluir. ¿Estás utilizando un IDE con una opción "autobuild" establecida por una oportunidad (como Eclipse)? – mschonaker

+0

Sí, limpio antes de compilar. Sí, traté de excluir '**/*. Java'. No uso IDE esta vez. Simplemente simple 'pom.xml' y consola. –

Respuesta

22

Aplicación simple con 3 clases.

com/company/Obj1.java 
com/company/Obj2.java 
com/company/inner/Obj3.java 

build en pom.xml

<build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>2.0.2</version> 
       <configuration> 
        <source>1.6</source> 
        <target>1.6</target> 
        <includes> 
        <include>com/company/inner/*.java</include> 
        </includes> 
       </configuration> 
      </plugin> 
      </plugins> 

    </build> 

resultado: se compila clase 1.
Y cualquier combinación de includes funciona bien
o quiere decir algo más?

+1

OMG! ¡Trabajos! ¡Pero con la versión 2.0.2 del compilador! Las versiones 2.5.1 y 2.3.2 ignoran incluye y excluye. Parece que encontramos un error aquí. –

+6

La versión 2.1 del compilador es la última con la que funciona. –

+0

Interesante ... Lo que escribí arriba es cierto en mi caso (mi módulo), pero en general, con un proyecto tan simple como el ejemplo de @Ilya, no hay problema incluso con la nueva versión de 'maven-compiler-plugin'. Parece que hay algo en el 'pom.xml' de mi módulo o en la jerarquía de los padres (hay algunos). Trataré de investigar mi caso y encontrar la respuesta que es realmente incorrecta. Si realmente es un problema con el compilador de Maven, crearé un ticket JIRA para ellos. –

0

No tuve dificultad para incluir o excluir archivos para la compilación con el complemento compilador maven 2.5.1. Here es el proyecto ficticio que utilicé para este propósito. Quizás el patrón include que usa es diferente.

0

maven-compiler-plugin que utiliza la notación de inclusión/exclusión Ant-like. Puede ver ejemplos en la documentación de Ant Ant FileSet Type

Si se desea incluir sólo los archivos de un directorio, es necesario escribir como lo hizo:

<include>com/example/dao/bean/*.java</include> 

para incluir también los subdirectorios de ruta, que será:

<include>com/example/dao/bean/**/*.java</include> 
Cuestiones relacionadas