Question

J'obtiens une réaction très confuse de la part de mon fichier de construction de fourmi et je me demande si je ne suis tout simplement pas assez intelligent ou s'il s'agit peut-être d'un bug.

J'ai la propriété suivante définie globalement dans mon projet :

<property name="lib.dir" location="lib"/>

Ensuite, je vais essayer d'ajouter quelques fichiers de ce répertoire dans un fichier jar via fileset (plus d'une ressource) :

<fileset dir="${basedir}" includes="lib/*filename*"/>

Il devrait y avoir (et exister) 3 bibliothèques différentes, qui correspondent de cette façon.Cependant, si j'essaie d'utiliser ce qui suit, cela ne fonctionne pas et aucun fichier n'est inclus :

<fileset dir="${basedir}" includes="${lib.dir}/*filename*"/>

Notez que les seules différences résident dans l’utilisation de la propriété globale.Maintenant la question simple :pourquoi la première version fonctionne-t-elle comme annoncé, mais pas la seconde ?

Était-ce utile?

La solution

Veuillez vérifier la valeur réelle de "lib.dir" juste avant et peut-être après la tâche qui utilise l'expression "fileset".Juste pour vous assurer qu'il n'a pas été modifié accidentellement après l'avoir défini globalement.Le <echo/> la tâche peut aider.


Peut-être que j'ai la solution.La description du locationl'attribut est :

Définit la propriété sur le nom de fichier absolu du fichier donné.Si la valeur de cet attribut est un chemin absolu, elle reste inchangée (avec les caractères / et \ convertis selon les conventions actuelles des plateformes).Sinon, il est considéré comme un chemin relatif au répertoire de base du projet et développé.

Utilisez simplement le value attribut au lieu de location.Voici un script de test pour montrer la différence :

<project name="test">

    <property name="test1" location="lib"></property>
    <property name="test2" value="lib"></property>

    <target name="target" description="description">
       <echo>${test1}</echo>
       <echo>${test2}</echo>
    </target>

</project>

Le résultat sur mon système est le suivant :

Buildfile: D:\Develop\workspace-jabber\scrapbook\build.xml
target:
     [echo] D:\Develop\workspace-jabber\scrapbook\lib
     [echo] lib
BUILD SUCCESSFUL
Total time: 307 milliseconds

Autres conseils

J'ai trouvé un indice pour la réponse, mais pas encore la totalité.

J'ai exécuté les deux versions de l'ensemble de fichiers avec ant -debug et voici ce qui se passe.

Dans la version fonctionnelle, sans propriété, j'obtiens le résultat suivant :

fileset: Setup scanner in dir [pathToDir] with patternSet{ includes: [lib/*filename*] excludes: [] }

alors que dans la version qui devrait fonctionner mais ne fonctionne pas, j'obtiens :

fileset: Setup scanner in dir [pathToDir] with patternSet{ includes: [ [pathToDir]/lib/*filename*] excludes: [] }

Comme vous pouvez le voir, Ant ajoute le [pathToDir] dans l'expression rationnelle, recherchant ainsi

[pathToDir]/[pathToDir]/lib/*filename*

qui n'existe évidemment pas.Problème maintenant :comment dois-je modifier ma version pour qu'elle fonctionne correctement ?

Lors de la création de la propriété (est-ce fait globalement ou dans une cible ?), le répertoire lib exister?Sinon, le location l'attribut ne fonctionne pas - utilisez un value attribut à la place ou mieux définir la propriété après avoir créé le répertoire.

Comme indiqué ci-dessus, le problème était que $ {lib.dir} trop contenait l'ensemble du chemin, recherchant ainsi [Pathtodir] / [PathtoDir] / lib / nom de fichier

.

.

Pour clipser la propriété [Pathtodir] indésirable dans la propriété $ {lib.dir}, j'ai maintenant utilisé la tâche.Je suis maintenant ce qui suit, mais imho pas si belle solution:

<basename property="lib.dir.rel" file="${lib.dir}"/>
<fileset dir="${basedir}" includes="${lib.dir.rel}/*filename*"/>

P.s.: sur un deuxième regard, j'ai trouvé que Andreas_D a également trouvé la bonne raison et une bonne suggestion hier, que je devais avoir oublié: - /

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top