使用Ant编译Java - 不断收到错误JNI发生了错误

时间:2015-06-11 18:01:38

标签: java eclipse ant

我正致力于提高编码/开发技能,并且是使用Ant的新手。我的目标是能够编译比#34; Hello World"更复杂的程序。从命令行。我试图编译和运行的程序使用存储在API中的库,我想我已经在build.xml文件中包含了正确的路径,代码将编译和jar(当我使用ant compile和ant jar命令时),但是当我运行它时,我得到一个运行时错误。

这是我的Ant构建文件:

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}}

我真的很感激任何帮助!

2 个答案:

答案 0 :(得分:7)

我有同样的错误。事实证明,Eclipse在Eclipse Home(外部ant安装)的Eclipse设置中使用了一个符号链接。

我通过将Eclipse的Ant Home更改为最终位置来解决它。

在Eclipse中Window - > Preferences然后Ant - > Runtime然后点击右侧的Ant Home...按钮,选择正确的Ant安装目录。

答案 1 :(得分:1)

您使用设置为dropbox-core-sdk-1.7.7.jar 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>