2012-06-15 9 views
17

Je souhaite compiler uniquement les fichiers ou répertoires sélectionnés (y compris les sous-répertoires) dans le répertoire source. J'étais assez sûr que je peux le faire en utilisant la configuration <includes> de maven-compiler-plugin, mais il semble ne pas fonctionner comme je l'espère, car il compile toujours toutes les classes en target/classes. Ce qui est vraiment étrange, sortie Maven suggère que le réglage ne fait son travail, car avec:Compiler uniquement les fichiers sélectionnés dans Maven

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

je:

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

mais avec la configuration sans compilateur j'ai:

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

Dans les deux cas, cependant, toutes les 14 classes sont compilées en target/classes comme je l'ai mentionné. Pouvez-vous expliquer cela ou suggérer une autre solution pour compiler seulement les fichiers sélectionnés?

+0

Vous souvenez-vous de faire un nettoyage avant de le tester? – artbristol

+0

Avez-vous essayé d'exclure **/* avant? Je suppose que par défaut maven inclut tout et vous devez exclure. Utilisez-vous un IDE avec une option "autobuild" définie par hasard (comme Eclipse)? – mschonaker

+0

Oui, je nettoie avant de compiler. Oui, j'ai essayé d'exclure '**/*. Java'. Je n'utilise pas IDE cette fois. Simplement 'pom.xml' et console. –

Répondre

22

Application simple avec 3 classes.

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

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

résultat: 1 classe est compilé.
Et toute combinaison d'inclus fonctionne bien
ou vous voulez dire quelque chose d'autre?

+1

OMG! Travaux! Mais avec la version 2.0.2 du compilateur! Les versions 2.5.1 et 2.3.2 ignore inclut et exclut. Il semble que nous ayons trouvé un bug ici. –

+6

La version 2.1 du compilateur est la dernière avec laquelle il fonctionne. –

+0

Intéressant ... Ce que j'ai écrit ci-dessus est vrai dans mon cas, mais en général, avec un projet aussi simple que l'exemple de @ Ilya, il n'y a pas de problème avec la nouvelle version de maven-compiler-plugin. Il semble qu'il y ait quelque chose dans le 'pom.xml' de mon module ou dans la hiérarchie des parents (il y en a quelques uns). Je vais essayer d'enquêter sur mon cas et de trouver la réponse à ce qui ne va pas. Si c'est vraiment un problème avec le compilateur Maven, je vais créer un ticket JIRA pour eux. –

0

Je n'ai eu aucune difficulté à inclure ou exclure des fichiers pour la compilation avec le plugin maven 2.5.1. Here est le projet fictif que j'ai utilisé à cet effet. Peut-être que le modèle include que vous utilisez est différent.

0

maven-compiler-plugin utilisant la notation d'inclusion/exclusion de type Ant. Vous pouvez voir des exemples dans la documentation Ant Ant FileSet Type

Si vous voulez inclure uniquement les fichiers d'un répertoire, vous avez besoin d'écrire comme vous avez fait:

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

Pour inclure également les sous-répertoires de chemin, ce sera:

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