2007/09/27

Umwandlung eines Ant Path in ein Attribute

Ich stand schon öfters vor dem Problem, das ich eine per "path" deklarierte Dateimenge in eine Liste umwandeln mußte, z.B. um alle Libs in das Class-Path Element der Manifest-Datei zu schreiben. Aus Zeitmangel hatte ich mir bisher leider immer für die händische Variante entschieden, dabei ist die Lösung so einfach.

Definieren eines Path:

<!-- Classpath declaration -->
<path id="project.classpath">
<fileset dir="${lib.dir}">
<include name="**/*.jar"/>
<include name="**/*.zip"/>
</fileset>
</path>

Dieser kann nun per Task "pathconvert" in die Property "lib.project.manifest.classpath" Umgewandelt werden:
    <!-- convert the libraries to be included in the  Class-Path
attribute of the MANIFEST.MF file -->
<pathconvert property="lib.project.manifest.classpath"
pathsep=" ">
<path refid="project.classpath"/>
<flattenmapper/>
</pathconvert>


Die Einbindung in das Manifest ist dann einfach:
    <target name="build-jar" depends="compile,copymetafiles">
<jar destfile="${build.dir}/intel.jar" basedir="${build.dir}">
<manifest>
<attribute name="Main-Class"
value="org.me.startmeup"/>
<attribute name="Class-Path"
value="${lib.project.manifest.classpath}"/>
</manifest>
</jar>
</target>


Warum ich das nicht schon eher gefunden hab? Keine Ahnung, schließlich ist "pathconvert" direkt unter den Core Tasks unter ant.apache.org gelistet.

1 comments:

Shou-Wu said...

Hat mir gerad sehr geholfen, thx.