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 đỡ!
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
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