java - Ant 失败 : Exception in thread “main” java. lang.NoClassDefFoundError org/apache/tools/ant/launch/Launcher

标签 java linux ant fedora openjdk

我在 Fedora 17 上。我正在尝试使用与 Java 7 不兼容的 ant 构建文件编译一个项目。所以我决定安装 OpenJDK 6。不幸的是,JDK 6 已从 yum 存储库中删除,我想手动安装它会很容易。我了解到没有 JAVA_HOME 变量,而是使用替代系统。所以我下载了 OpenJDK 二进制文件(如果重要的话,可以从 OSG 下载)并使用 alternatives --install 命令安装 java & javac & javaws。检查java --versionjavac --version 证明是成功的。但奇怪的是 Ant 不再工作了!当我键入 ant --execdebug 时,我收到此消息:

exec "/usr/lib/jvm/openjdk-6.0.24/bin/java" -classpath "/usr/bin/build-classpath: 
error: JVM_LIBDIR /usr/lib/jvm-exports/openjdk-6.0.24 does not exist or is not a 
directory:/usr/bin/build-classpath: error: JVM_LIBDIR /usr/lib/jvm-exports/openjdk-6.0.24 
does not exist or is not a directory:/usr/lib/jvm/openjdk-6.0.24/lib/tools.jar"
-Dant.home="/usr/share/ant" -Dant.library.dir="/usr/share/ant/lib" 
org.apache.tools.ant.launch.Launcher -cp ""
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/tools/ant/launch/Launcher
Caused by: java.lang.ClassNotFoundException: org.apache.tools.ant.launch.Launcher
    at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
Could not find the main class: org.apache.tools.ant.launch.Launcher. Program will exit.

与 java 一样,也没有 ANT_HOME 变量。但是即使在安装 java 6 之前也没有 ANT_HOME,它工作正常。 Ant 安装在 PATH 中的/usr/bin/ant 下。

更新:我知道有类似的问题qustion 1 , question 2 .但都没有解决我的问题。例如,添加 ANT_HOME=/usr/bin 会使情况恶化,因为即使在 JDK 7 中,ant 也无法正常工作!由于对alternatives系统不熟悉,我完全删除了java相关的alternatives,添加了JAVA_HOME,修改了PATH。同样,java 和 javac 工作正常,java --version 返回正确的版本,但 ant 返回相同的错误。正如 --execdebug 告诉我们的,JVM_LIBDIR 没有指向正确的位置。我想该值是在 java.conf 文件中设置的,所以我将其粘贴在这里(我已经在/usr/lib/jvm 上安装了 JDK 6 和 7):

# System-wide Java configuration file                                -*- sh -*-
#
# JPackage Project <http://www.jpackage.org/>

# Location of jar files on the system
JAVA_LIBDIR=/usr/share/java

# Location of arch-specific jar files on the system
JNI_LIBDIR=/usr/lib64/java

# Location for noarch jar files using arch-specifics jar files
JAVAJNI_LIBDIR=/usr/share/java-jni

# Root of all JVM installations
JVM_ROOT=/usr/lib/jvm

# You can define a system-wide JVM root here if you're not using the
# default one.
#
# If you have the a base JRE package installed
# (e.g. java-1.6.0-openjdk):
#JAVA_HOME=$JVM_ROOT/jre
#
# If you have the a devel JDK package installed
# (e.g. java-1.6.0-openjdk-devel):
#JAVA_HOME=$JVM_ROOT/java-1.7.0-openjdk-1.7.0.9.x86_64
JAVA_HOME=$JVM_ROOT/openjdk-6.0.24

# Options to pass to the java interpreter
JAVACMD_OPTS=

通过在 java.conf 中注释和取消注释相应的行,结果表明 ant 在 7 上工作正常而在 6 上失败。当我在 ant shell 中的 java 命令之前回显 JVM_LIBDIR 时,我收到 java.conf 中所述的 user/share/java。但是 ant --execdebug 返回了一些奇怪的东西:JVM_LIBDIR/usr/lib/jvm-exports/openjdk-6.0.24。那是什么,我该如何解决?

如果你不能说出这里的问题,安装多个版本的 JDK 的最简洁和最安全的方法是什么,可以轻松切换?

非常感谢任何帮助。

最佳答案

您在类路径中缺少一个 jar。确保您在 lib 文件夹中拥有所有必需的库,ant 从中获取依赖项。

检查这个similar question.

关于java - Ant 失败 : Exception in thread “main” java. lang.NoClassDefFoundError org/apache/tools/ant/launch/Launcher,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15134656/

相关文章:

java - JMX MXBean 枚举处理转换错误

java - 安卓 Ant 错误 : invalid resource directory name: ./bin/res\crunch

antlib 和类路径引用

java - 使用 ANT 构建时出现 "Build Failed: failed to create task or type classpath"

签名验证期间的 Java 异常(错误解码签名字节)

java - 从网站地址列表中提取顶级域名

java - Java 中的新用途(有人可以告诉我为什么这不起作用,就像我不断收到错误一样)

python - 如何在 Linux 中获取二进制文件和库文件夹的路径?

linux - 在 R ("No such file or directory"中安装包(AlgDesign 和 ggplot2)时出现问题

linux - Pip 安装带有 QML 调试标志的 PyQt5