2012-06-15 17 views
17

Desidero compilare solo i file o le directory selezionati (comprese le sottodirectory) all'interno della directory di origine. Ero abbastanza sicuro di poterlo fare usando la configurazione <includes> di maven-compiler-plugin, ma sembra non funzionare come mi aspetto visto che compila ancora tutte le classi in target/classes. Ciò che è davvero strano, uscita Maven suggeriscono che l'impostazione fa in realtà il suo lavoro, perché con:Compilare solo i file selezionati in Maven

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

ho:

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

ma con la configurazione di nessuno compilatore che ho:

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

In entrambi i casi, tuttavia, tutte le 14 classi sono compilate in target/classes come già detto. Puoi spiegarlo o suggerire un'altra soluzione per compilare solo i file selezionati?

+0

Ti sei ricordato di fare una pulizia prima di testarla? – artbristol

+0

Hai provato a escludere **/* prima? Immagino che di default Maven includa tutto e tu debba escludere. Stai usando un IDE con un'opzione "autobuild" impostata per caso (come Eclipse)? – mschonaker

+0

Sì, pulisco prima di compilare. Sì, ho provato a escludere '**/*. Java'. Non uso IDE questa volta. Semplicemente 'pom.xml' e console. –

risposta

22

App semplice con 3 classi.

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

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

risultato: 1 classe è compilata.
E qualsiasi combinazione di include funziona bene
o vuoi dire qualcos'altro?

+1

OMG! Lavori! Ma con la versione 2.0.2 del compilatore! Le versioni 2.5.1 e 2.3.2 ignorano include ed esclude. Sembra che abbiamo trovato un bug qui. –

+6

La versione 2.1 del compilatore è l'ultima con cui funziona. –

+0

Interessante ... Quello che ho scritto sopra è vero nel mio caso (il mio modulo), ma in generale, con un progetto così semplice come l'esempio di @ Ilya, non c'è alcun problema anche con la nuova versione di 'maven-compiler-plugin'. Sembra che ci sia qualcosa nella 'pom.xml' del mio modulo o nella gerarchia dei genitori (ce ne sono alcuni). Proverò a indagare sul mio caso e a trovare la risposta che cosa è effettivamente sbagliato. Se è davvero un problema con il compilatore Maven, creerò per loro il biglietto JIRA. –

0

Non ho avuto difficoltà a includere o escludere i file per la compilazione con il plugin del compilatore maven 2.5.1. Here è il progetto fittizio che ho usato per lo scopo. Forse il pattern include che usi è diverso.

0

maven-compiler-plugin che utilizza la notazione inclusione/esclusione di tipo Ant. È possibile vedere esempi nella documentazione Ant Ant FileSet Type

Se si desidera includere solo i file da una directory, è necessario scrivere come hai fatto:

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

Per includere anche le sottodirectory di percorso, sarà:

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