توليد يعبر عن فئة من المسار <classpath> في النمل ،
سؤال
في بناء الملف أدناه ، جرة الهدف يشير إلى الجرة.فئة.مسار ممتلكات يعبر عن فئة المسار.ترجمة الهدف يشير إلى المشروع.فئة.المسار
هناك التكرار هنا ، لأن جرة.فئة.مسار المشروع.فئة.مسار متشابهة جدا.يجب أن تكون كل تحديث عندما المكتبات المضافة التي يمكن أن يكون الألم إذا كانت قائمة المكتبات يحصل منذ فترة طويلة جدا.هل هناك طريقة أفضل ؟ أي حل يجب أن يكون عبر منصة دائما استخدام المسارات النسبية.
تحرير:
يجب أن تولد جرة classpath من fileset وليس العكس لذا يمكن استخدام أحرف البدل إلى مثلتشمل جميع جرة الملفات في الدليل.
<?xml version="1.0"?>
<project name="Higgins" default="jar" basedir=".">
<property name="jar.class.path" value="lib/forms-1.2.0.jar lib/BrowserLauncher.jar"/>
<path id="project.class.path">
<pathelement location="build"/>
<fileset dir="lib">
<include name="forms-1.2.0.jar"/>
<include name="BrowserLauncher.jar"/>
</fileset>
</path>
<target name="prepare">
<mkdir dir="build"/>
</target>
<target name="compile" depends="prepare" description="Compile core sources">
<javac srcdir="src"
includes="**"
destdir="build"
debug="true"
source="1.5">
<classpath refid="project.class.path"/>
</javac>
</target>
<target name="jar" depends="compile" description="Generates executable jar file">
<jar jarfile="higgins.jar">
<manifest>
<attribute name="Main-Class" value="nl.helixsoft.higgins.Main"/>
<attribute name="Class-Path" value="${jar.class.path}"/>
</manifest>
<fileset dir="build" includes="**/*.class"/>
<fileset dir="src" includes="**/*.properties"/>
</jar>
</target>
</project>
المحلول
وعلى افتراض النملة 1.7 أو أعلى، يمكنك استخدام المهمة manifestclasspath .
<path id="dep.runtime">
<fileset dir="./lib">
<include name="**/*.jar" />
</fileset>
</path>
<property name="dep_cp" value="${toString:dep.runtime}" />
<target name="default">
<manifestclasspath property="manifest_cp" jarfile="myjar.jar">
<classpath refid="dep.runtime" />
</manifestclasspath>
<echo message="Build Classpath: ${dep_cp}" />
<echo message="Manifest Classpath: ${manifest_cp}" />
</target>
نصائح أخرى
<path id="build.classpath">
<fileset dir="${basedir}">
<include name="lib/*.jar"/>
</fileset>
</path>
<pathconvert property="manifest.classpath" pathsep=" ">
<path refid="build.classpath"/>
<mapper>
<chainedmapper>
<flattenmapper/>
<globmapper from="*.jar" to="lib/*.jar"/>
</chainedmapper>
</mapper>
</pathconvert>
<target depends="compile" name="buildjar">
<jar jarfile="${basedir}/${test.jar}">
<fileset dir="${build}" />
<manifest>
<attribute name="Main-Class" value="com.mycompany.TestMain"/>
<attribute name="Class-Path" value="${manifest.classpath}"/>
</manifest>
</jar>
</target>
لمزيد من المعلومات راجع هذه المقالة .
إذا كنت ترغب فقط مشترك subpath مشترك بين اثنين (أو أكثر) المسارات التي من السهل القيام به:
<path id="lib.path>
<fileset dir="lib">
<include name="forms-1.2.0.jar"/>
<include name="BrowserLauncher.jar"/>
</fileset>
</path>
<path id="project.class.path">
<pathelement location="build"/>
<path refid="lib.path"/>
</path>
<property name="jar.class.path" refid="lib.path"/>
تحرير آسف, لقد أسأت فهم السؤال.جرب هذا:
<property name="jar.class.path" value="lib/forms-1.2.0.jar lib/BrowserLauncher.jar"/>
<path id="project.class.path">
<pathelement location="build"/>
<fileset dir="." includes="${jar.class.path}"/>
</path>
ويمكنك استخدام
وغادر التنفيذ باعتبارها ممارسة للقارئ.