java - 使用 Ant 编译 Java - 不断出现错误 JNI 错误已发生

标签 java eclipse ant

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

这是我的 Ant 构建文件:

<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

非常感谢任何帮助!

最佳答案

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

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

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

关于java - 使用 Ant 编译 Java - 不断出现错误 JNI 错误已发生,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30788175/

相关文章:

java - 如何防止 Jackson 序列化多态类型的注释属性?

java - 使用旋转矩阵的旋转角度如何对应度数

java - 无法迭代列表

java - 通过删除中间接口(interface)(使用 ObjectAid 创建)来简化 UML 图

java - 在 eclipse 中使用 Runtime.getRuntime().exec

ant - 在典型的 ant 构建文件中有哪些默认目标?

java - 在 unnamed.war 中找不到 META-INF/MANIFEST.MF 文件

java - 使用相机闪光灯作为手电筒使用 Eclipse 的应用程序无法正常工作

java - 在一致的环境中执行 Java 程序

java - 后续第 2 部分——使用 Maven 仅对 jar 进行签名并将其部署到 Maven Central。构建和编译完全由 Ant 完成