2009-03-25 11 views
8

मेरे पास जावा प्रोजेक्ट के लिए एक मानक प्रोजेक्ट लेआउट है:अपाचे चींटी प्रकट वर्ग पथ?

project/
    src/
     source_file_1.java 
     ... 
     source_file_N.java 
    build/
      classes/
       source_file_X.class 
       ... 
      jar/
       MyJar.jar 
    lib/
      SomeLibrary.jar 
      SomeOtherLibrary.jar 

जहां तक ​​मैं कह सकता हूं, मैं प्रोजेक्ट को एंट के साथ सही तरीके से बना रहा हूं। मुझे मेनिफेस्ट फ़ाइल में क्लास-पथ विशेषता सेट करने की आवश्यकता है, इसलिए मेरी कक्षाएं आवश्यक पुस्तकालयों का उपयोग कर सकती हैं।

build.xml

<target name="compile" depends="init"> 
    <javac srcdir="src" destdir="build\classes"> 
     <classpath id="classpath"> 
      <fileset dir="lib"> 
       <include name="**/*.jar" /> 
      </fileset> 
     </classpath> 
    </javac> 
</target> 

<target name="jar" depends="compile"> 
    <jar destfile="build\jar\MyJar.jar" basedir="build\classes" > 
     <manifest> 
      <attribute name="Built-By" value="${user.name}" /> 
     </manifest> 
    </jar> 
</target> 

से निम्नलिखित प्रासंगिक जानकारी सही दिशा में किसी भी धक्का की सराहना की जाती है। धन्यवाद

उत्तर

8

मेरी NetBeans-उत्पन्न निर्माण फ़ाइल को देखते हुए, मैं -do-jar-with-libraries कार्य में इस स्निपेट नहीं मिली:

<manifest> 
    <attribute name="Main-Class" value="${main.class}"/> 
    <attribute name="Class-Path" value="${jar.classpath}"/> 
</manifest> 
दूसरे शब्दों में

तो, ऐसा लगता है जैसे तुम सिर्फ प्रकट कार्य करने के लिए एक और विशेषता जोड़ने की जरूरत है लग रहा है कि तुम्हारे पास पहले से है।

Manifest Task documentation भी देखें।

+0

मैं आपके जवाब देने से पहले इस निष्कर्ष पर आया, हालांकि मुझे जार.क्लासपाथ से अनजान था। मुझे एंटी प्रलेखन में द्वारा फेंक दिया गया था http://ant.apache.org/manual/CoreTasks/manifestclasspath.html –

+0

ओह हाँ और धन्यवाद –

+0

jar.classpath को बिल्ड फ़ाइल में कहीं और नेटबीन द्वारा परिभाषित किया गया है, I मानना। –

37

पुस्तकालयों मान लिया जाये कि जार फ़ाइल को क्रियान्वित करने के संकलन से स्थान में परिवर्तन नहीं करते हैं, तो आप एक रास्ता तत्व अपने classpath को संकलन लक्ष्य के बाहर तो जैसे बना सकते हैं:

<path id="compile.classpath"> 
    <fileset dir="lib" includes="**/*.jar"/> 
</path> 

तो आपके द्वारा बनाए पथ का उपयोग कर सकते हैं अपने वर्तमान वर्गपाथ के स्थान पर अपने जावैक कार्य के अंदर।

<classpath refid="compile.classpath"/> 

फिर आप मैनिफेस्ट क्लासपाथ सेट करने के लिए पथ का उपयोग कर सकते हैं।

<target name="jar" depends="compile"> 
    <manifestclasspath property="jar.classpath" jarfile="build\jar\MyJar.jar"> 
     <classpath refid="compile.classpath"/> 
    </manifestclasspath>  
    <jar destfile="build\jar\MyJar.jar" basedir="build\classes" > 
     <manifest> 
      <attribute name="Built-By" value="${user.name}" /> 
      <attribute name="Class-Path" value="${jar.classpath}"/> 
     </manifest> 
    </jar> 
</target> 

manifestclasspath मैनिफ़ेस्ट फ़ाइल में उपयोग जो 72 वर्ण के बाद लिपटे किया जाना चाहिए के लिए एक ठीक से प्रारूपित classpath उत्पन्न करता है। लांग क्लासपाथ जिनमें कई जार फ़ाइलें या लंबे पथ होते हैं, वे मैनिफेस्ट क्लासपैथ कार्य के बिना सही ढंग से काम नहीं कर सकते हैं।

+0

फ़्लैटन के साथ: http://stackoverflow.com/questions/858766/generate-manifest-class-path-from-classpath-in-ant – Vadzim

संबंधित मुद्दे