2015-06-11 16 views
5

Tôi đang làm việc để cải thiện kỹ năng viết mã/phát triển của mình và mới sử dụng Ant. Mục tiêu của tôi là để có thể biên dịch các chương trình phức tạp hơn "Hello World" từ dòng lệnh. Chương trình mà tôi đang cố gắng biên dịch và chạy sử dụng các thư viện được lưu trữ trong một API, và tôi nghĩ rằng tôi đã đưa đường dẫn chính xác vào tệp build.xml của mình, mã sẽ biên dịch và jar (khi tôi sử dụng lệnh ant compile và ant jar), nhưng khi tôi chạy nó tôi nhận được một lỗi thời gian chạy.Biên dịch Java với Ant - tiếp tục gặp lỗi JNI đã xảy ra

Dưới đây là xây dựng Ant của tôi file:

<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"/> 

này tạo ra các lỗi sau đây:

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 

Tôi thực sự đánh giá cao bất kỳ sự giúp đỡ!

Trả lời

1

Bạn đã biên soạn với đường dẫn lớp được đặt thành bình cầu dropbox-core-sdk-1.7.7.jar, nhưng bạn không chạy mã với đường dẫn lớp đó. Bạn cần phải làm tương tự cho tác vụ java, nếu không JVM sẽ không tìm thấy các lớp của bên thứ ba.

<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

Tôi đã gặp lỗi tương tự. Hóa ra Eclipse đang sử dụng một liên kết tượng trưng trong cài đặt Eclipse cho Ant Home (cài đặt kiến ​​bên ngoài).

Tôi đã giải quyết nó bằng cách thay đổi Ant Home của Eclipse thành vị trí chính xác.

Trong Eclipse Window ->Preferences sau đó Ant ->Runtime sau đó nhấn vào nút Ant Home... trên bên phải và chọn Ant đúng thư mục cài đặt.

+1

Haha Tôi là một thằng ngốc nhìn thấy ngắn. Điều này đã khắc phục sự cố của tôi chính xác. Vấn đề của tôi thực sự là tôi muốn chỉ Ant Home của tôi tại C: \ apache-tomcat thay vì C: \ apache-ant. – thonnor

+0

Cảm ơn! Điều này đã khiến tôi phát điên! Bạn đã cứu ngày của tôi (hay đúng hơn là: đêm của tôi)! – mmo

Các vấn đề liên quan