2009-07-02 12 views
17

Sto utilizzando uno script Ant-build per fascicolare la mia applicazione basata su Eclipse per la distribuzione.Come utilizzare il carattere jolly nel comando Available di Ant

Un passo del build è controllare che le librerie corrette siano presenti nelle cartelle di compilazione. Attualmente utilizzo il comando Ant per questo. Sfortunatamente, devo modificare lo script ogni volta che passo a una nuova build di Eclipse (dato che i numeri di versione saranno aggiornati).

Non ho bisogno di controllare i numeri di versione, ho solo bisogno di controllare che il file sia lì.

Allora, come faccio a verificare la presenza di:

org.eclipse.rcp_3.5.0.* 

invece di:

org.eclipse.rcp_3.5.0.v20090519-9SA0FwxFv6x089WEf-TWh11 

usando Ant?

applausi, Ian

risposta

22

Vuoi dire, qualcosa di simile (in base alla pathconvert task, dopo this idea):

<target name="checkEclipseRcp"> 
    <pathconvert property="foundRcp" setonempty="false" pathsep=" "> 
    <path> 
     <fileset dir="/folder/folder/eclipse" 
       includes="org.eclipse.rcp_3.5.0.*" /> 
    </path> 
    </pathconvert> 
</target> 

<target name="process" depends="checkEclipseRcp" if="foundRcp"> 
    <!-- do something --> 
</target> 
+0

che suona perfetta - Muoio dalla voglia di fare un tentativo. Se solo avessi fatto la domanda 3 anni fa, avrei risparmiato tantissimo tempo. acclamazioni, Ian – ianmayo

0

Il compito pathconvert è probabilmente il modo migliore per andare nella maggior parte dei casi. Ma crea un piccolo problema quando l'albero delle directory è molto grande e si utilizza l'attività ecoproprietà. Con un albero di directory molto grande, la stringa generata da pathconvert può essere enorme. Quindi ecoproprietà spruzza l'enorme stringa, rendendo l'output più difficile da lavorare. Io uso un macrodef su Linux che crea una proprietà impostata a "1" se ci sono file nella directory:

<macrodef name="chkDirContents" > 
    <attribute name="propertyName" /> 
    <attribute name="dirPath" /> 
    <attribute name="propertyFile" /> 
    <sequential> 
     <exec executable="sh" dir="." failonerror="false" > 
      <arg value="-c" /> 
      <arg value='fyles=`ls -1 @{dirPath} | head -1` ; if [ "$fyles" != "" ] ; then echo @{propertyName}=1 > @{propertyFile} ; fi' /> 
     </exec> 
    </sequential> 
</macrodef> 

<target name="test" > 
    <tempfile destdir="." property="temp.file" deleteonexit="true" /> 
    <chkDirContents propertyName="files.exist" dirPath="./target_dir" propertyFile="${temp.file}" /> 
    <property file="${temp.file}" /> 

    <echoproperties/> 
</target> 

Esecuzione il bersaglio "test" genererà la seguente riga di echoproperties se ci sono file nella ./ target_dir/directory:

[echoproperties] files.exist=1 

cosa "test" fa: genera un nome di file temporaneo, $ {} temp.file, che può poi essere utilizzato come un file di proprietà. Esegue quindi macrodef, che chiama la shell per controllare il contenuto della directory dirPath. Se ci sono file o directory in dirPath, assegna la proprietà propertyName al valore 1 nel file temporaneo. Quindi legge il file e imposta la proprietà fornita nel file. Se il file è vuoto, nessuna proprietà è definita.

Si noti che il file temporaneo può essere riutilizzato per le chiamate successive di macrodef se lo si desidera. D'altra parte, ovviamente, una volta che una proprietà è impostata, è immutabile.

+0

molto generoso da parte vostra intervenire e offrire il miglioramento. Se solo fossi stato a conoscenza di questo miglioramento 4 anni fa, quando ho commentato che ero stato a conoscenza della soluzione di base 3 anni prima. Chissà che miglioramento potrei imparare tra 5 anni? – ianmayo

7

Un approccio leggermente più breve e più semplice con resourcecount condizione:

<target name="checkEclipseRcp"> 
    <condition property="foundRcp"> 
     <resourcecount when="greater" count="0"> 
      <fileset file="/folder/folder/eclipse/org.eclipse.rcp_3.5.0.*"/> 
     </resourcecount> 
    </condition> 
</target> 

<target name="process" depends="checkEclipseRcp" if="foundRcp"> 
    <!-- do something --> 
</target> 
Problemi correlati