2017-04-07 2 views
1

J'ai une exigence où je veux nettoyer seulement les fichiers dans mon destDir qui ne sont plus présents dans sourceDir. Ex: Supposons que j'ai une classe: Student.java et College.java dans mon sourceDir. L'exécution de la tâche ant pour la première fois générerait Student.class et College.class. Maintenant, si je supprime Student.java de sourceDir et ajoute une autre classe 'Employee.java et que j'exécute une tâche ant-javac, je vois un nouveau fichier,' Employee.class 'généré dans destDir, mais l'ancien fichier' Student.class 'est toujours là même si' Student.java 'n'existe plus dans sourceDir. Mon exigence est de supprimer tous les fichiers de destDir qui ne sont plus dans le répertoire source.Comment puis-je nettoyer seulement les fichiers de destDir qui ne sont plus dans mon répertoire source en utilisant ant-javac?

PS: Je sais déjà que propre fourmi fonctionnera comme il va nettoyer mon DestDir avant de compiler, mais en raison de quelques limitations wrt ma demande, je ne peux pas nettoyer le DestDir avant d'exécuter javac

Répondre

1

peu inhabituel comme vous soulignez , cas d'utilisation typique est de nettoyer le répertoire destDir avant de compiler ... Cependant, vous pouvez faire un nettoyage spécifique en sélectionnant explicitement les ressources qui ne sont plus présentes dans le répertoire des sources. Vous pouvez utiliser Selectors pour sélectionner les ressources à supprimer. L'extrait suivant doit correctement nettoyer votre destDir s'il est exécuté avant la tâche javac:

<delete> 
    <!-- select all classes that do not have a related source file --> 
    <fileset dir="${build.dir}" includes="**/*.class"> 
     <not> 
      <present targetdir="${src.dir}"> 
       <!-- use a regex mapper to handle inner classes --> 
       <regexpmapper from="^([^\$]*)(\$.*)?.class" to="\1.java"/> 
      </present> 
     </not> 
    </fileset> 
</delete>