Frage

Ich bekomme eine sehr verwirrende Reaktion von meiner Ant-Build-Datei und frage mich, ob ich einfach nicht schlau genug bin oder ob es sich tatsächlich um einen Fehler handeln könnte.

Ich habe die folgende Eigenschaft global in meinem Projekt festgelegt:

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

Dann werde ich versuchen, einige Dateien aus diesem Verzeichnis über einen Dateisatz (mehr als eine Ressource) in eine JAR-Datei hinzuzufügen:

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

Es sollten (und existieren) 3 verschiedene Bibliotheken vorhanden sein, die auf diese Weise zusammenpassen.Wenn ich jedoch versuche, Folgendes zu verwenden, funktioniert es nicht und es sind keine Dateien enthalten:

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

Beachten Sie, dass die einzigen Unterschiede in der Verwendung der globalen Eigenschaft liegen.Nun die einfache Frage:Warum funktioniert die erste Version wie angekündigt, die zweite jedoch nicht?

War es hilfreich?

Lösung

Bitte überprüfen Sie den tatsächlichen Wert von „lib.dir“ direkt vor und möglicherweise nach der Aufgabe, die den Ausdruck „fileset“ verwendet.Nur um sicherzustellen, dass es nicht versehentlich geändert wurde, nachdem Sie es global festgelegt haben.Der <echo/> Aufgabe kann helfen.


Vielleicht habe ich die Lösung.Die Beschreibung der locationAttribut ist:

Setzt die Eigenschaft auf den absoluten Dateinamen der angegebenen Datei.Wenn der Wert dieses Attributs ein absoluter Pfad ist, bleibt er unverändert (wobei die Zeichen / und \ in die aktuellen Plattformkonventionen konvertiert werden).Andernfalls wird es als Pfad relativ zum Basisverzeichnis des Projekts verwendet und erweitert.

Nutzen Sie einfach die value Attribut statt location.Hier ist ein Testskript, um den Unterschied zu zeigen:

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

Die Ausgabe auf meinem System ist wie folgt:

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

Andere Tipps

Ich habe einen Hinweis auf die Antwort gefunden, aber nicht das Ganze noch.

Ich habe beide Versionen des Filesets mit Ant -debug versetzt und hier passiert.

Im Arbeitsplatz, nicht mithilfe-Eigenschaftsversion, erhalte ich die folgende Ausgabe:

generasacodicetagpre.

in der Erwägung, dass in der Soll-Bearbeitungs-aber-nicht-Version bekomme ich:

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

Wie Sie sehen, as as as add add the [pathtodir] in der regexp und sucht somit nach

generasacodicetagpre.

das ist offensichtlich nicht vorhanden.Problem jetzt: Wie muss ich meine Version ändern, damit sie ordnungsgemäß funktioniert?

Beim Erstellen der Eigenschaft (erfolgt dies global oder in einem Ziel?) wird das Verzeichnis berücksichtigt lib existieren?Wenn nicht, wird die location Attribut funktioniert nicht – verwenden Sie a value Verwenden Sie stattdessen ein Attribut oder definieren Sie die Eigenschaft besser nach dem Erstellen des Verzeichnisses.

Wie oben angegeben, war das Problem, dass $ {lib.dir} auch den gesamten Pfad enthielt und suchte nach [pathtodir] / [pathtodir] / lib / Dateiname .

Um den unerwünschten [pathtodir] in der Eigenschaft von $ {lib.dir} abzuschließen, habe ich jetzt die Aufgabe genutzt.Ich habe jetzt Folgendes, aber imho nicht so schön aussehende Lösung:

generasacodicetagpre.

p

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top