2009-03-26 1 views
3

Ich versuche, ant4eclipse zu arbeiten, und ich habe ant ein wenig, aber nicht viel über eine einfache Skriptsprache verwendet. Wir haben mehrere Quellordner in unseren Eclipse-Projekten so das Beispiel in der ant4eclipse Dokumentation muss die Anpassung:Wie "erweitere" ich einen ant Pfad (Zugriff mit refId = ..) auf alle Dateien im Pfad mit Ausnahme einiger?

Zur Zeit habe ich folgende:

<target name="build"> 

    <!-- resolve the eclipse output location --> 
    <getOutputpath property="classes.dir" workspace="${workspace}" projectName="${project.name}" /> 

    <!-- init output location --> 
    <delete dir="${classes.dir}" /> 
    <mkdir dir="${classes.dir}" /> 

    <!-- resolve the eclipse source location --> 
    <getSourcepath pathId="source.path" project="." allowMultipleFolders='true'/> 

    <!-- read the eclipse classpath --> 
    <getEclipseClasspath pathId="build.classpath" 
          workspace="${workspace}" projectName="${project.name}" /> 

    <!-- compile --> 
    <javac destdir="${classes.dir}" classpathref="build.classpath" verbose="false" encoding="iso-8859-1"> 
    <src refid="source.path" /> 
    </javac> 

    <!-- copy resources from src to bin --> 
    <copy todir="${classes.dir}" preservelastmodified="true"> 
    <fileset refid="source.path"> 
     <include name="**/*"/> 
     <!-- 
     patternset refid="not.java.files"/> 
     --> 
    </fileset> 
    </copy> 
</target> 

Die Aufgabe erfolgreich ausgeführt wird, aber ich kann die Arbeit nicht bekommen - es soll auch alle Nicht-Java-Dateien kopieren, um das Verhalten von Eclipse zu emulieren.

Also, ich habe eine pathId mit dem Namen source.path, die mehrere Verzeichnisse enthält, die ich irgendwie in etwas die Kopie-Task wie einmassieren muss. Ich habe versucht, Schachteln, die nicht gültig ist, und einige andere wilde Vermutungen.

Wie kann ich das tun - danke im Voraus.

Antwort

2

könnten Sie verwenden die foreach Aufgabe aus der ant-contrib Bibliothek:

<target name="build"> 
    ... 

    <!-- copy resources from src to bin --> 
    <foreach target="copy.resources" param="resource.dir"> 
     <path refid="source.path"/> 
    </foreach> 
</target> 

<target name="copy.resources"> 
    <copy todir="${classes.dir}" preservelastmodified="true"> 
     <fileset dir="${resource.dir}" exclude="**/*.java"> 
    </copy> 
</target> 

Wenn Ihre source.path Dateipfade enthalten auch dann könnte man die if Aufgabe (auch von ant-contrib) versucht, zu verhindern, dass Dateien zu kopieren für ein Dateipfad, z

<target name="copy.resources"> 
    <if> 
     <available file="${classes.dir}" type="dir"/> 
     <then> 
      <copy todir="${classes.dir}" preservelastmodified="true"> 
       <fileset dir="${resource.dir}" exclude="**/*.java"> 
      </copy> 
     </then> 
    </if> 
</target> 
+0

Dies war, was ich getan habe. Beachten Sie, dass dies bei jedem vernünftig vollständigen Eclipse-Emulation-Build-System außer Kontrolle gerät. –

3

Sie sollten erwägen pathconvert mit einem Muster zu bauen, dass fileset includes arbeiten kann.

<pathconvert pathsep="/**/*," refid="source.path" property="my_fileset_pattern"> 
    <filtermapper> 
     <replacestring from="${basedir}/" to="" /> 
    </filtermapper> 
</pathconvert> 

Die ${my_fileset_pattern} mit einem String wie bevölkern:

1/**/*,2/**/*,3 

wenn source.path bestand aus den drei Verzeichnissen 1, 2 und 3 unter der basedir. Wir verwenden die pathsep, um Platzhalter einzufügen, die später auf den vollständigen Satz von Dateien erweitert werden.

Die Eigenschaft kann jetzt verwendet werden, um eine Dateigruppe aller Dateien zu generieren. Beachten Sie, dass ein extra Trailing /**/* erforderlich ist, um das letzte Verzeichnis in dem Satz zu erweitern. Ausschlüsse können an dieser Stelle angewendet werden.

<fileset dir="." id="my_fileset" includes="${my_fileset_pattern}/**/*"> 
    <exclude name="**/*.java" /> 
</fileset> 

Die Kopie aller Nicht-Java-Dateien wird dann:

<copy todir="${classes.dir}" preservelastmodified="true"> 
    <fileset refid="my_fileset" /> 
</copy> 

dass die Quelldateien über Beibehaltung der Quellverzeichnisstruktur unter todir kopiert. Bei Bedarf kann das Attribut flatten des Kopiervorgangs so eingestellt werden, dass alle Quelldateien direkt in todir kopiert werden.

Beachten Sie, dass das Pfadkonvertierungsbeispiel hier für ein Unix-Dateisystem statt Windows ist. Wenn etwas tragbares benötigt wird, dann sollte die file.separator Eigenschaft verwendet werden, um das Muster aufzubauen:

<property name="wildcard" value="${file.separator}**${file.separator}*" /> 
<pathconvert pathsep="${wildcard}," refid="source.path" property="my_fileset"> 
... 
Verwandte Themen