2010-02-13 11 views
6

J'ai regardé un tas d'exemples différents, et j'ai essayé plusieurs variantes, mais je n'arrive pas à le faire fonctionner correctement. Il semble également que vous ne pouvez pas exclure un répertoire entier avec javac, mais uniquement des fichiers, ce qui, je suppose, signifie que vous ne pouvez pas spécifier un paquet? Voici ce que j'ai:Comment exclure un paquet source en utilisant javac dans Ant?

<javac srcdir="src" destdir="WEB-INF/classes" excludes="path/to/excluded/package/*.java"> 
    <classpath refid="compile.classpath"/> <!-- reference defined earlier --> 
</javac> 

Répondre

11

Vous pouvez exclure des répertoires entiers ou des arborescences de répertoires avec "**" et exclure. Exemple

<dirset dir="aDirectory"> 
    <include name="a/package/**"/> 
    <exclude name="**/package/to/exclude**"/> 
</dirset> 
+0

Le dirset imbriqué ne fonctionne pas avec la tâche javac. –

+0

A droite, mais dans le cadre d'un chemin de classe référencé dans la tâche javac, ils devraient fonctionner. – akr

5

S'il vous plaît noter que l'exclusion ne fonctionne pas si l'un des fichiers « src » (ou « comprend » si spécifié) dépendance dans les fichiers spécifiés dans exclut. Assurez-vous d'abord que les fichiers exclus ne sont pas référencés dans les fichiers d'inclusion.

1

La tâche javac inclut tous les fichiers implicitement dans le srcdir et vous pouvez simplement ajouter un élément à exclure la tâche, par exemple:

<javac destdir="build" srcdir="src" > 
    <exclude name="**/my/package/test/*.java" /> 
</javac> 

Ce ne compilerait une des classes dans le package my.package.test.

+2

Le problème est que lorsqu'une autre classe importe à partir de ce paquet, le compilateur tire dans ce fichier, même s'il déclare ici pour l'exclure. Tout ce qui est inclus/exclu est juste l'ensemble initial qui est fourni à javac. Javac est alors libre de récupérer d'autres fichiers, basés sur le (s) répertoire (s) src. Il est nécessaire de dire à javac de ne pas explicitement accéder à certains fichiers. Je pense que cela ne peut être fait qu'en copiant seulement les fichiers que vous êtes prêt à donner à javac, puis compiler ce sous-ensemble. – Mike

+2

Ceci est utile lorsque vous disposez d'un package dont aucun autre code ne dépend, comme les classes de test, qui ne doit pas être déployé. –

0

Mike, une autre façon de dire à javac de ne pas explicitement accéder à certains fichiers est de désactiver sourcepath. Je viens de comprendre ceci ...

A partir du manuel Ant:

Note: Si vous souhaitez compiler uniquement les fichiers source situés dans certains paquets ci-dessous une racine commune, utilisez les inclure/exclure les attributs ou /éléments imbriqués à filtrer pour ces packages. Do ne pas inclure une partie de la structure de votre package dans l'attribut srcdir (ou éléments imbriqués), ou Ant recompilera vos fichiers source toutes les fois que vous exécutez votre cible de compilation. Consultez la FAQ Ant pour plus d'informations sur .

Si vous souhaitez compiler uniquement les fichiers explicitement spécifiés et désactiver par défaut le mécanisme de recherche de javac alors vous pouvez décharger l'sourcepath attribut:

<javac sourcepath="" srcdir="${src}" destdir="${build}" > 
    <include name="**/*.java"/> 
    <exclude name="**/Example.java"/> 
</javac> 

De cette façon, le javac compiler tous les fichiers source java sous le répertoire "$ {src}" mais ignorez les exemples. Le compilateur produira même des erreurs si certains des fichiers non-exemples s'y réfèrent.