2015-06-11 10 views
5

मैं अपने कोडिंग/विकास कौशल में सुधार करने के लिए काम कर रहा हूं और चींटी का उपयोग करने के लिए नया हूं। मेरा लक्ष्य कमांड लाइन से "हैलो वर्ल्ड" से अधिक जटिल प्रोग्राम को संकलित करने में सक्षम होना है। जिस प्रोग्राम को मैं संकलित करने और चलाने की कोशिश कर रहा हूं, उसे एपीआई में संग्रहीत पुस्तकालयों का उपयोग करता है, और मुझे लगता है कि मैंने अपनी build.xml फ़ाइल में सही पथ शामिल किया है, कोड संकलित और जार होगा (जब मैं चींटी संकलन और चींटी जार कमांड का उपयोग करता हूं), लेकिन जब मैं इसे चलाता हूं तो मुझे रन टाइम त्रुटि मिलती है।चींटी के साथ जावा संकलित करना - त्रुटि प्राप्त करना जारी रखें जेएनआई त्रुटि हुई है

यहाँ मेरी चींटी निर्माण फ़ाइल है:

<project name="Main" basedir="." default="main"> 
<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="lib"/> 
<property name="main-class" value="myProject.Main"/> 

<target name="clean"> 
    <delete dir="${classes.dir}"/> 
</target> 
<target name="compile" depends="clean"> 
    <mkdir dir="${classes.dir}"/> 
    <javac srcdir="${src.dir}" destdir="${classes.dir}" includeantruntime="false"> 
     <classpath> 
       <path location="${jar.dir}/dropbox-core-sdk-1.7.7.jar"/> 
       <path location="${jar.dir}/jackson-core-2.2.4.jar"/> 
     </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 jar="${jar.dir}/${ant.project.name}.jar" fork="true"/> 
</target> 

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

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

इस निम्नलिखित त्रुटियाँ पैदा करता है:

Buildfile: /Users/Phil/Documents/Java workspace/DropBoxProgram/build.xml 
clean: 
[delete] Deleting directory /Users/Phil/Documents/Java workspace/DropBoxProgram/build/classes 

compile: 
[mkdir] Created dir: /Users/Phil/Documents/Java workspace/DropBoxProgram/build/classes 
[javac] Compiling 7 source files to /Users/Phil/Documents/Java workspace/DropBoxProgram/build/classes 

jar: 
[jar] Building jar: /Users/Phil/Documents/Java workspace/DropBoxProgram/lib/Main.jar 

run: 
[java] Error: A JNI error has occurred, please check your installation and try again 
[java] Exception in thread "main" java.lang.NoClassDefFoundError: com/dropbox/core/DbxException 
[java] at java.lang.Class.getDeclaredMethods0(Native Method) 
[java] at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) 
[java] at java.lang.Class.privateGetMethodRecursive(Class.java:3048) 
[java] at java.lang.Class.getMethod0(Class.java:3018) 
[java] at java.lang.Class.getMethod(Class.java:1784) 
[java] at sun.launcher.LauncherHelper.validateMainClass(LauncherHelper.java:544) 
[java] at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:526) 
[java] Caused by: java.lang.ClassNotFoundException: com.dropbox.core.DbxException 
[java] at java.net.URLClassLoader.findClass(URLClassLoader.java:381) 
[java] at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
[java] at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) 
[java] at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
[java] ... 7 more 
[java] Java Result: 1 
BUILD SUCCESSFUL 
Total time: 1 second 

मैं वास्तव में किसी भी मदद की सराहना करते हैं!

उत्तर

1

आपने क्लासपाथ सेट को dropbox-core-sdk-1.7.7.jar जार में संकलित किया है, लेकिन आपने उस क्लासपाथ के साथ कोड नहीं चलाया था। आपको java कार्य के लिए ऐसा करने की ज़रूरत है, अन्यथा JVM को तृतीय-पक्ष कक्षाएं नहीं मिलेंगी।

<java jar="${jar.dir}/${ant.project.name}.jar" fork="true"> 
    <classpath> 
      <path location="${jar.dir}/dropbox-core-sdk-1.7.7.jar"/> 
      <path location="${jar.dir}/jackson-core-2.2.4.jar"/> 
    </classpath> 
</java> 
5

मुझे एक ही त्रुटि थी। यह पता चला है कि ग्रहण एंटी होम (बाहरी चींटी स्थापना) के लिए ग्रहण सेटअप में एक सिम्लिंक का उपयोग कर रहा था।

मैंने ग्रहण एंटी होम को एक निश्चित स्थान पर बदलकर हल किया।

ग्रहण Window में ->Preferences तो Ant ->Runtime तो सही पर Ant Home... बटन पर क्लिक करें और सही चींटी चुनें निर्देशिका स्थापित करें।

+1

हाहा मैं एक छोटा सा बेवकूफ़ हूँ। यह मेरी समस्या ठीक से तय किया। मेरी समस्या वास्तव में थी कि मैं सी: \ apache-ant के बजाय सी: \ apache-tomcat पर अपने चींटी होम को इंगित करता था। – thonnor

+0

धन्यवाद! यह मुझे पागल कर दिया! आपने मेरा दिन बचाया (या बल्कि: मेरी रात)! – mmo

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