2011-11-28 8 views
6

In Cartella, src, ho una serie di sottocartelle con il codice sorgente di Java:Pathconvert con nomi di file relativi

/a/A.java

/a/b/B.java

/a/b/c/C.java

ho bisogno di una proprietà con il seguente valore:

src/a/A.java,src/a/b/B.java,src/a/b/c/C.java 

ho provato la seguente:

<pathconvert property="list-of-files"> 
    <globmapper from="*" to="src/*"/> 
    <fileset dir=${src-folder}/> 
</pathconvert> 

ma io alla fine con il seguente valore sulla mia proprietà:

src/full/path/to/folder_a/a/A.java,src/full/path/to/folder_a/a/b/B.java,src/full/path/to/folder_a/a/b/c/C.java 

Come posso realizzare quello che voglio? Qualsiasi input è apprezzato!

risposta

8

Per questo è possibile utilizzare il parametro map di pathconvert.

Prima ottenere il percorso completo della directory src aggiungendo il suo percorso al valore della proprietà basedir. Quindi utilizzalo come attributo from della tua mappa.

<property name="src.dir" value="${basedir}${file.separator}${src-folder}"/> 
<pathconvert property="list-of-files"> 
    <map from="${src.dir}" to="src"/> 
    <fileset dir="${src-folder}"/> 
</pathconvert> 
+1

Ottimo, funziona. Grazie! – Liz

+1

Puoi anche ottenere il percorso assoluto con posizione anziché valore: '' –

0

Provate sia questo:

<pathconvert property="list-of-files"> 
    <globmapper from="*" to="src/*"/> 
    <cutdirsmapper dirs="N"/> 
    <fileset dir=${src-folder}/> 
</pathconvert> 

(qui N - Numero di directory a striscia (deve essere un numero positivo))

o questo: dopo tassello del codice lista treat -Di-files attraverso la

<mapper type="flatten"/> 
<flattenmapper/> 

Spero che questo aiuto =)

+0

Purtroppo nessuno di questi lavori Non posso usare la prima alternativa perché la nuber "N" non è costante nelle mie build. E la seconda alternativa rimuove le cartelle * all * e lascia il mio con solo un elenco di file Java. Quindi finisco con: A.java, B.java, C.java che non è quello che voglio. – Liz

2

Solo nel caso, se qualcuno ha bisogno di ottenere i percorsi dei file relativi di risorse e di mappare i percorsi URL di conseguenza, in modo che funziona sia su Windows e * nix la soluzione è:

<pathconvert dirsep="/" pathsep=";" property="css.files.list"> 
    <map from="${basedir}/" to="" /><!-- This is the trick. Remove slash to make path absolute. --> 
    <fileset dir="." includes="${src.dir}/**/*.css" /> 
</pathconvert>