2009-10-15 13 views
16

में क्लासपाथ सेट करने में समस्याएं मुझे अपने जावा प्रोग्राम को चलाने में समस्याएं आ रही हैं (यह कुछ तृतीय पक्ष JARs का उपयोग करती है)। मैं इसे ठीक से संकलित कर सकता हूं लेकिन जब मैं अपने रन लक्ष्य को चींटी में बुलाता हूं तो यह कहता है कि यह क्लासपाथ में चलाने वाले वर्ग को नहीं मिला है।एंटी

<project basedir="." default="build"> 
<property name="build" value="build" /> 
<property name="src" value="." /> 
<property name="lib" value="lib" /> 

<path id="classpath"> 
    <fileset dir="${lib}"> 
     <include name="**/*.jar" /> 
    </fileset> 
    <fileset dir="${build}"> 
     <include name="*.class" /> 
    </fileset> 
</path> 

<target name="build"> 
    <javac srcdir="${src}" destdir="${build}"> 
     <classpath refid="classpath" /> 
    </javac> 
</target> 

<target name="run"> 
    <java classname="FirstClass"> 
     <classpath refid="classpath" /> 
    </java> 
</target> 

किसी को भी पता है मैं गलत क्या कर रहा हो सकता है: यहाँ मेरी build.xml कैसा दिखता है?


यहाँ चींटी से मेरी स्टैक ट्रेस है:

ant run Buildfile: build.xml 

run: 
[java] Could not find GuiStarter. Make sure you have it in your classpath 
[java] at org.apache.tools.ant.taskdefs.ExecuteJava.execute(ExecuteJava.java:138) 
[java] at org.apache.tools.ant.taskdefs.Java.run(Java.java:764) 
[java] at org.apache.tools.ant.taskdefs.Java.executeJava(Java.java:218) 
[java] at org.apache.tools.ant.taskdefs.Java.executeJava(Java.java:132) 
[java] at org.apache.tools.ant.taskdefs.Java.execute(Java.java:105) 
[java] at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288) 
[java] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
[java] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
[java] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
[java] at java.lang.reflect.Method.invoke(Method.java:616) 
[java] at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106) 
[java] at org.apache.tools.ant.Task.perform(Task.java:348) 
[java] at org.apache.tools.ant.Target.execute(Target.java:357) 
[java] at org.apache.tools.ant.Target.performTasks(Target.java:385) 
[java] at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1337) 
[java] at org.apache.tools.ant.Project.executeTarget(Project.java:1306) 
[java] at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41) 
[java] at org.apache.tools.ant.Project.executeTargets(Project.java:1189) 
[java] at org.apache.tools.ant.Main.runBuild(Main.java:758) 
[java] at org.apache.tools.ant.Main.startAnt(Main.java:217) 
[java] at org.apache.tools.ant.launch.Launcher.run(Launcher.java:257) 
[java] at org.apache.tools.ant.launch.Launcher.main(Launcher.java:104) 
[java] Java Result: -1 

BUILD SUCCESSFUL Total time: 1 second 
+0

lib निर्देशिका src निर्देशिका के भीतर निहित है? यदि आपके पास आधारित के रूप में उपयोग की जाने वाली एक अलग स्रोत निर्देशिका है, और lib स्रोत के समान स्तर पर है, तो आपको आधार बनाने के लिए .. और स्रोत निर्देशिका को स्रोत निर्देशिका के रूप में निर्दिष्ट करना होगा। या आप अपनी चींटी स्क्रिप्ट को एक निर्देशिका में ले जा सकते हैं। –

+0

क्या आप अपने स्रोतों में डिफ़ॉल्ट पैकेज का उपयोग करते हैं? यदि आपको शायद अपने क्लासपाथ में "**/*। Class" शामिल करने की आवश्यकता नहीं है। –

उत्तर

3

जिस तरह से यह है - के अंदर अपने रास्ते पर lib निर्देशिका रिश्तेदार लोड हो रहे हैं केवल जार। क्या आपके पास अपने सभी 3-पक्षीय पार्टी जार हैं? कुछ रन-टाइम लाइब्रेरी हो सकती हैं जिन्हें आपको संकलित समय की आवश्यकता नहीं है लेकिन जो रन टाइम पर गायब हैं। यदि आप अपना स्टैकट्रैक पोस्ट करते हैं तो मैं आपको और बता दूंगा :)

+0

मेरा स्टैकट्रैक इस टिप्पणी में फिट नहीं हो सका इसलिए मैंने इसे इस प्रश्न का उत्तर दिया। – David

+0

एचएम - गुईस्टाटर लगता है जैसे आपके पास एक वर्ग है जिसमें पैकेज नहीं है (क्या यह तुम्हारा है?) - इस मामले में आपको यह सुनिश्चित करने की ज़रूरत है कि आपकी शीर्ष स्तरीय निर्देशिका क्लासपाथ में भी है – Bostone

+0

धन्यवाद, यह वास्तव में सहायक था ! यहां तक ​​कि 3 साल बाद भी :) –

5

मुझे लगता है कि समस्या आपके classpath पथ घोषणा के साथ है। build निर्देशिका इसके अलावा एक <pathelement>

<path id="classpath"> 
    <fileset dir="${lib}"> 
     <include name="**/*.jar" /> 
    </fileset> 
    <pathelement location="${build}" /> 
</path> 

होना चाहिए, मैं सिर्फ अपने classpath refid में 3-तीय पक्ष जार शामिल होंगे। तो पूरा ब्लॉक दिखता है।

<path id="3rd-party-classpath"> 
    <fileset dir="${lib}"> 
     <include name="**/*.jar" /> 
    </fileset> 
</path> 

<target name="build"> 
    <javac srcdir="${src}" destdir="${build}"> 
     <classpath refid="3rd-party-classpath" /> 
    </javac> 
</target> 

<target name="run"> 
    <java classname="FirstClass"> 
     <classpath> 
     <pathelement location="${build}" /> 
     <path refid="3rd-party-classpath" /> 
     </classpath> 
    </java> 
</target> 

इसके अलावा, जैसा DroidIn.net बताया गया है, तो आप आप इस कार्यक्रम के लिए एक पैकेज बनाना चाहिए।

+0

मैं सहमत हूं - मुझे लगता है कि "pathelement" कक्षाओं के लिए आप – Bostone

+0

के लिए उपयोग करते हैं, इन संशोधनों के साथ मुझे java.lang मिल रहा है। NoClassDefFoundError: com/sun/media/codec/audio/audioCodec अपवाद के बजाय एक GuiStarter नहीं मिल सका। सुनिश्चित करें कि आपके पास अपनी क्लासपाथ त्रुटि में है। मुझे लगता है कि इस परियोजना के लिए जार को मेरी चींटी lib निर्देशिका में रखना आसान होगा। – David

+0

जार को चींटी lib निर्देशिका में न डालें। ऐसा लगता है कि 3-डी पार्टी टूल उपर्युक्त लाइब्रेरी पर निर्भरता रखते हैं। शायद यह आपको सही दिशा में इंगित करेगा http://ubuntuforums.org/archive/index.php/t-351989.html –

0

इसे आज़माएं, मैं अपनी कक्षा को चलाने में सक्षम हो सकता था।

<property name="src.dir" value="src" /> 
<property name="build.dir" value="build" /> 
<property name="classes.dir" value="${build.dir}/classes" /> 
<property name="jar.dir" value="${build.dir}/jar" /> 
<property name="main-class" value="sample.Sample" /> 

<target name="clean"> 
    <delete dir="${classes.dir}" /> 
</target> 

<path id="classpath"> 
    <fileset dir="${jar.dir}"> 
     <include name="*.jar" /> 
    </fileset> 
    <fileset dir="${classes.dir}"> 
     <include name="/*.class" /> 
    </fileset> 
</path> 

<target name="compile"> 
    <mkdir dir="${classes.dir}" /> 
    <javac srcdir="${src.dir}" destdir="${classes.dir}"> 
     <classpath refid="classpath" /> 
    </javac> 
</target> 

<target name="jar" depends="compile"> 
    <mkdir dir="${jar.dir}" /> 
    <jar destfile="${jar.dir}/${ant.project.name}.jar" basedir="${classes.dir}"> 
     <manifest> 
      <attribute name="Main-Class" value="${main-class}" /> 
     </manifest> 
    </jar> 
</target> 

<target name="run" depends="jar"> 
    <java classname="${main-class}"> 
     <classpath refid="classpath" /> 
    </java> 
</target> 

<target name="clean-build" depends="clean,jar" /> 

<target name="main" depends="clean,run" />