IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ANT Java Discussion :

[Ant 1.6.2][Copy Task] Problème avec la tache de copy


Sujet :

ANT Java

  1. #1
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    377
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 377
    Points : 356
    Points
    356
    Par défaut [Ant 1.6.2][Copy Task] Problème avec la tache de copy
    Bonjour,

    Alors voilà , j'ai le code suivant dans Ant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <target name="testcopy">
     <copy toDir="${build.livraison.destination}" >
      <fileset dir="${build.livraison.source}" > 
       <include name="WEB-INF/classes/mesclassesINEXISTANTES" />
       <include name="WEB-INF/classes/mesclassesexistantes"/>
      </fileset>
     </copy>
    </target>
    Quand je l'exécute , je n'ai aucune sortie d'erreur.
    Il me copie les classes qui existent , mais ne me dit rien pour les autres ?
    çà vous dit quelque chose ?
    D'avance merci.

  2. #2
    ego
    ego est déconnecté
    Rédacteur

    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    1 883
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 883
    Points : 3 510
    Points
    3 510
    Billets dans le blog
    2
    Par défaut
    C'est tout à fait normal.
    Que voudrais tu faire à propos des classes qui n'existent pas ?
    Tu as par exemple la tâche ANT "available" qui te permet de positionner une propriété si une ressource existe.

    Tu peux donc faire un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <target name="check">
      <available file="file1" property="file1_existe"/>
    </target>
     
    <target name="ma_copie" depends="check" if="file1_existe">
      <copy ....>
       ...
      </copy>
    </target>

  3. #3
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    377
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 377
    Points : 356
    Points
    356
    Par défaut
    Bah je ne sais pas si cela est TOUT A FAIT normal.
    La tâche pourrait au moins loggué , ou partir en erreur.
    Pour info , elle le fait si tu utilises l'attribut file de la tache copy ?
    Donc pourquoi arrêter le contrôle à ce niveau là ??? Je ne vois pas bien !!
    Enfin , mon problème est que je copie des éléments depuis un fichier .includes, parce que j'ai plus ou moins de fichiers à ajouter, et que cela permet déviter de coder çà dans le script à chaque fois.
    Et du coup quand j'ai beaucoup de fichiers, si j'ai fait une faute de frappe, je ne sais pas le ou lesquels j'ai foiré(s) !!
    Tu peux imaginer si tu as 100 fichiers à vérifier ..... Galère ! Galère !
    Si tu as donc une solution avec available , je suis preneur.
    En tout cas merci pour ta réponse.

  4. #4
    ego
    ego est déconnecté
    Rédacteur

    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    1 883
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 883
    Points : 3 510
    Points
    3 510
    Billets dans le blog
    2
    Par défaut
    Le fonctionnement de la tâche copy est tout à fait correcte.
    La création du fileset est sous la responsabilité du runtime ANT. Ce fileset est ensuite passé à la tâche copy. Copy ne peut pas savoir pourquoi le fileset est vide, est surtout s'il faut faire qq chose de particulier dans ce cas.

    Pour ton problème, il faut savoir que dans ANT, il n'y a pas vraiment d(beaucoup) e tâches capables de travailler sur des listes d'éléments (peut de tâches utilisent le type filelist par exemple).
    Pour résoudre ton problème, je te recommande la solution suivante :

    1- Tu crées un fichier avec ta liste de fichier (ok, tu l'as déjà fait)
    2- Tu crées une tâche ANT qui prend se fichier en paramètre, c'est très simple car si tu crées un setter de type File, ANT créera automatiquement l'objet de type File pour toi à partir du nom du fichier. Ta tâche lie le fichier et test l'existance ou non de chaque fichier.
    Si un fichier n'existe pas, tu fais 2 choses :
    2.1- tu positionnes une property "file_not_exist". Cette proriété est à utiliser comme dans mon exemple sur available (sauf qu'à la place du if tu mets unless)
    2.2- tu logges le fichier qui n'existe pas
    3- Tu crées une autre tâche qui hérite de copy et à laquelle tu passes le nom de ton fichier (celui qui comporte la liste). Dans le setter de la propriété qui te permet de passer ce fichier (du nom de filelist et de type File par exemple), tu lis le fichier (comme dans la tâche précedente) et tu crées un fileset à la main (c'est très très simple) et tu positionnes la propriété "fileset" de la tâche copy.
    4- Tu déclares tes 2 tâches dans ton build.xml (cf. doc ANT pour cela)

  5. #5
    ego
    ego est déconnecté
    Rédacteur

    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    1 883
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 883
    Points : 3 510
    Points
    3 510
    Billets dans le blog
    2
    Par défaut
    J'ai retrouvé une vielle tâche que j'avais réalisé.
    Je ne t'explique pas tout le truc mais cela te donnera un exemple d'utilisation de la tâche copy (notes que ma tâche n'hérite pas de copy, ce qui serait peut être mieux dans ton cas).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    package org.apache.tools.ant.taskdefs.optional.valtechtoolkit;
     
    import org.apache.tools.ant.BuildException;
    import org.apache.tools.ant.Task;
    import java.io.File;
    import org.xres4j.ResourcesManager;
    import java.io.FileReader;
    import java.io.FileInputStream;
    import org.xres4j.ResourcesEnumeration;
    import org.apache.tools.ant.taskdefs.Copy;
    import org.apache.tools.ant.types.FilterSet;
    import org.apache.tools.ant.taskdefs.Filter;
     
    public class ApplyOnNodes extends Task {
        public ApplyOnNodes() {
        }
     
        public void execute() throws BuildException {
            try {
                initialize();
                ResourcesEnumeration iter = rm.getResources("/nodes/node");
                String nodeName;
                while (iter.hasNext()) {
                    nodeName = iter.getResource("@name");
                    generateNodeFile(nodeName,iter);
                }
            }
            catch (Exception e) {
                e.printStackTrace();
                throw new BuildException();
            }
        }
     
        private void generateNodeFile(String nodeName,ResourcesEnumeration iter) throws BuildException {
            try {
                Copy copyTask = new Copy();
                copyTask.setProject(getProject());
                String destFilename = getProject().getBaseDir() + File.separator + destDir + File.separator + nodeName + extension;
                copyTask.setTofile(new File(destFilename));
                copyTask.setFile(template);
     
                FilterSet filter = copyTask.createFilterSet();
                String token,value;
     
    			filter.addFilter("name",nodeName);
     
                token = "/nodes/node[@name=\'"+nodeName+"\']/listen-port/@value";
    			value = rm.getResource(token);
    			filter.addFilter("listen-port",value);
     
                token = "/nodes/node[@name=\'"+nodeName+"\']/ssl-port/@value";
    			value = rm.getResource(token);
    			filter.addFilter("ssl-port",value);
                token = "/nodes/node[@name=\'"+nodeName+"\']/in-cluster/@value";
    			value = rm.getResource(token);
                filter.addFilter("in-cluster",value);
     
                copyTask.setFiltering(true);
                copyTask.execute();
           }
            catch (Exception e) {
                            e.printStackTrace();
                throw new BuildException();
            }
        }
     
        private void initialize() throws BuildException {
            try {
                fullNodeFilename = getProject().getBaseDir() + File.separator + nodes;
                System.setProperty("resources.pathsep", "|");
                System.setProperty("resources.path", "..");
                System.setProperty("resources.filenames", fullNodeFilename);
                rm = new ResourcesManager();
            } catch (Exception e) {
                throw new BuildException();
            }
        }
     
        public File getTemplate() { return template; }
     
        public void setTemplate(File f) { template = f; }
     
        public String getNodes() { return nodes; }
     
        public void setNodes(String n) { nodes = n; }
     
        public String getDestDir() { return destDir; }
     
        public void setDestDir(String n) { destDir = n; }
     
        public String getExtension() { return extension; }
     
        public void setExtension(String n) { extension = n; }
     
        private File template;
        private String nodes;
        private String fullNodeFilename;
        private String destDir;
        private String templateContent;
        private String extension = ".node";
        private ResourcesManager rm = null;
    }

Discussions similaires

  1. un problème avec le module File::Copy
    Par Aymen_bass dans le forum Modules
    Réponses: 6
    Dernier message: 14/09/2009, 14h21
  2. Petit problème avec le constructeur par copie
    Par beegees dans le forum C++
    Réponses: 16
    Dernier message: 01/04/2008, 16h34
  3. Réponses: 10
    Dernier message: 30/04/2007, 17h25
  4. [Debutant] Problème avec un constructeur par copie
    Par Drannor dans le forum Débuter
    Réponses: 5
    Dernier message: 12/03/2007, 09h15
  5. Problème avec les conctructeurs de copie
    Par tom6304 dans le forum C++
    Réponses: 7
    Dernier message: 11/02/2007, 12h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo