Domanda

Ricevo una reazione molto confusa dal file di build della mia formica e mi chiedo se non sono abbastanza intelligente o se questo potrebbe effettivamente essere un bug.

Ho la seguente proprietà impostata a livello globale nel mio progetto:

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

Quindi proverò ad aggiungere alcuni file da questa directory in un file jar tramite fileset (più di una risorsa):

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

Dovrebbero esserci (ed esistere) 3 librerie diverse, abbinate in questo modo.Tuttavia, se provo a utilizzare quanto segue, non funziona e non vengono inclusi file:

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

Tieni presente che le uniche differenze risiedono nell'utilizzo della proprietà globale.Ora la domanda semplice:perché la prima versione funziona come pubblicizzato, ma la seconda no?

È stato utile?

Soluzione

Controlla il valore effettivo di "lib.dir" subito prima e forse dopo l'attività che utilizza l'espressione "fileset".Solo per essere sicuri che non sia stato modificato accidentalmente dopo averlo impostato a livello globale.IL <echo/> il compito può aiutare.


Forse ho trovato la soluzione.La descrizione del locationl'attributo è:

Imposta la proprietà sul nome file assoluto del file specificato.Se il valore di questo attributo è un percorso assoluto, viene lasciato invariato (con i caratteri / e \ convertiti alle convenzioni attuali della piattaforma).Altrimenti viene preso come percorso relativo alla base del progetto ed espanso.

Usa semplicemente il value attributo invece di location.Ecco uno script di test per mostrare la differenza:

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

L'output sul mio sistema è il seguente:

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

Altri suggerimenti

Ho trovato un indizio per la risposta, ma non è ancora tutto.

Ho gestito entrambe le versioni del fileSet con Ant -Debug e qui è ciò che succede.

Nella versione di lavoro, non usare la proprietà, ottengo la seguente output:

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

considerando che nella versione dovrei-be-work-ma-non ottengo:

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

Come puoi vedere, ANT Aggiungi il [Pathtodir] nel regexp, cercando così

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

che ovviamente non esiste.Problema ora: come devo modificare la mia versione per farlo funzionare correttamente?

Quando si crea la proprietà (è fatto globale o in un bersaglio?), Esistono la directory lib?In caso contrario, l'attributo location non funziona - Utilizzare invece un attributo value o definisci meglio la proprietà dopo aver creato la directory.

Come indicato sopra, il problema era che $ {lib.dir} anche conteneva l'intero percorso, cercando così [pathtodir] / [pathtodir] / lib / nome file .

Per ritagliare l'indesiderato [pathtodir] nella proprietà $ {lib.dir}, ora ho usato il compito.Ora sono il seguente, ma IMHO non è così bello Soluzione dall'aspetto:

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

P.S.: Su un secondo look, ho scoperto che Andreas_D ha anche trovato la ragione giusta e un buon suggerimento ieri, che devo aver trascurato: - /

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top