में
यहां पर अनावश्यकता है, क्योंकि jar.class.path और project.class.path बहुत समान हैं। लाइब्रेरी जोड़े जाने पर उन्हें अपडेट किया जाना चाहिए, यदि पुस्तकालयों की सूची बहुत लंबी हो जाती है तो दर्द हो सकता है। क्या कोई बेहतर तरीका है? कोई समाधान क्रॉस-प्लेटफॉर्म होना चाहिए और हमेशा सापेक्ष पथ का उपयोग करना चाहिए।
संपादित करें:
इसे एक फाइलसेट से जेएआर क्लासपाथ उत्पन्न करना चाहिए, न कि अन्य तरीकों से, इसलिए मैं वाइल्डकार्ड का उपयोग उदाहरण के लिए कर सकता हूं निर्देशिका में सभी जेएआर फाइलों को शामिल करें।
<?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>
यह काम करता है, लेकिन केवल तभी जब आपके क्लासपाथ में पूर्ण पथ नहीं हैं। उदाहरण के लिए, यदि आप डेबियन पैकेज 'libhibernate3-java' का उपयोग कर रहे हैं जो '/ usr/share/java/hibernate3.jar' में स्थापित होता है और आप इसे अपने क्लासपाथ में शामिल करते हैं, तो manifestclasspath चींटी कार्य एक त्रुटि फेंक देगा। Qianjigui का समाधान अभी भी काम करता है। – joscarsson