30

我使用 yum 在 Fedora 5 机器上安装了 Ant,但 Ant 没有启动。我收到此错误消息:

[bash]# ant
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:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
Could not find the main class: org.apache.tools.ant.launch.Launcher.  Program will exit.

我设置了以下环境变量:

JAVA_HOME = /usr/java/latest
ANT_HOME = /usr/bin

Ant 安装在/usr/bin/ant.

我也遇到过这篇文章,似乎该JAVAVER_LIBDIR变量没有指向存在的东西。我设置了一个符号链接,就像帖子建议为作者清除了问题一样,但它并没有为我解决问题。

[bash]# sudo ln -s /usr/share/java /usr/share/java-1.6.0

编辑:我还设置了一个符号链接,解决了与JAVAVER_JNIDIR变量类似的问题:

[bash]# sudo ln -s /usr/lib/java /usr/lib/java-1.6.0

我现在收到一条不同的错误消息:

[bash]# ant --execdebug
/usr/bin/build-classpath: error: Could not find jaxp_parser_impl Java extension for this JVM
/usr/bin/build-classpath: error: Could not find xml-commons-apis Java extension for this JVM
/usr/bin/build-classpath: error: Some specified jars were not found
exec "/usr/java/latest/bin/java" -classpath "/usr/share/java-1.6.0/ant.jar:/usr/share/java-1.6.0/ant-launcher.jar:/usr/java/latest/lib/tools.jar" -Dant.home="/usr" -Dant.library.dir="/usr/lib" org.apache.tools.ant.launch.Launcher -cp ""
Buildfile: build.xml does not exist!
Build failed

关闭谷歌这些错误消息......

4

12 回答 12

26

我刚刚在 Fedora 18 上遇到了类似的问题。

长话短说,运行:

sudo mkdir /usr/lib/java-1.7.0 /usr/share/java-1.7.0

显然,这个问题是特定的,java-1.7.0-openjdk因为所有其他 JDK 版本都存在类似的目录。


细节

运行后出现单行错误ant

Error: Could not find or load main class org.apache.tools.ant.launch.Launcher

问题出在/usr/share/java-utils/java-functions脚本中的某个地方,它试图设置JAVAVER_JNIDIR/JAVAVER_LIBDIR变量来引用上面的目录。由于不适当的错误消息重定向到标准输出,一些变量得到了如下赋值:

LOCALCLASSPATH='/usr/bin/build-classpath: error: JAVAVER_JNIDIR /usr/lib/java-1.7.0 does not exist or is not a directory'

根据所有其他 java 版本设置的约定创建目录是最干净的解决方案。

于 2013-03-17T18:57:55.133 回答
13
sudo mkdir /usr/lib/java-1.7.0 /usr/share/java-1.7.0

我通过下载 tar 文件并将其放在 /opt 中安装了 sun java 1.7.x。因为我没有进行 yum 安装,所以没有创建这些目录。我的 JAVA_HOME 设置为:

$ echo $JAVA_HOME/
/opt/jdk1.7.0_03/

正如其他人所说,运行以下提供了非常有用的调试:

ant --execdebug
于 2013-04-01T14:19:08.443 回答
12

我认为 ANT_HOME 应该设置为 '/usr/bin/ant'。我有那个配置(CENTOS 5)。

我在“/etc/profile.d”下的 sh 脚本有这个配置:

export JAVA_HOME="/usr/local/java";
export ANT_HOME="/usr/local/ant";

我希望它对你有帮助。

于 2010-02-25T17:58:48.413 回答
6

我有一个类似的问题,但以下为我解决了这个问题:

sudo yum install xml-commons-apis
于 2011-04-11T20:16:04.560 回答
4

我今天收到了同样的错误信息,但由不同的原因触发。

就我而言,更新到 OpenJDK 1.8.0 后,我无法再运行 ant。

问题在于java -fullversion命令的输出发生了细微的变化,并且/usr/share/java-utils/java-functions不再正确理解它。

升级到最新版本的jpackage-utilsRPM 为我解决了这个问题。

于 2015-12-14T00:43:10.493 回答
3

我在 Fedora 16 上遇到过这样的问题,但在我的情况下xerces,包xml-commons-apis并没问题。实际上,--execdebug它非常有用,它打印出 ant 无法在/usr/lib/jvm-exports/YOUR_JDK. 这是因为我从 openjdk 切换到 oracle 的 jdk 并且以前版本的 jdk ( /usr/lib/jvm-exports/java-1.6.0-openjdk-1.6.0.0) 的目录留在那里,但没有我当前版本的目录 ( /usr/lib/jvm-exports/jdk1.6.0_32)。这些目录仅包含一堆指向特定 jre jar 的软链接,因此我采取了以下步骤:

  1. 为当前版本的 jdk ( jdk1.6.0_32)创建一个新目录
  2. 将openjdk目录中的所有链接复制到新目录
    # cp -av java-1.6.0-openjdk-1.6.0.0.x86_64/* jdk1.6.0_32/
  3. 更正所有这些,以便它们指向 oracle 的罐子,例如:
    # cd /usr/lib/jvm-exports/jdk1.6.0_32
    # ln -s -f $JAVA_HOME/jre/lib/rt.jar jaas-1.6.0.0.jar

显然,$JAVA_HOME设置正确(在新的jdk版本上)。它解决了我的问题,并且可能是除上述原因之外的另一个原因。

于 2013-02-02T12:28:48.467 回答
2

尝试安装xerces-j2-xml-apis

于 2011-01-31T09:32:39.257 回答
2

在我的情况下,我正在设置我的ANT_HOME变量,但已/bin/附加在系统路径中使用 - 这个主变量不应该是二进制目录,使用以下设置 ant hime,并将二进制目录添加到 env 路径。

export ANT_HOME=/opt/apache-ant-1.9.4
export PATH=$ANT_HOME/bin:$PATH
于 2015-04-10T15:49:49.027 回答
1

我在 Suse,SLES 11 上遇到了同样的问题。Hidayath 的回答https://stackoverflow.com/a/4849302/1211900解决了它。假设开箱即用的软件包存储库:me@sles:~> sudo zypper install xerces-j2-xml-apis

于 2012-02-15T17:07:38.463 回答
1

我在 OS X 上遇到了完全相同的错误消息,但有人建议取消设置 ANT_HOME 并且有效。 https://github.com/Homebrew/homebrew/issues/32851

于 2015-11-06T20:57:42.297 回答
0

运行which ant就知道ant_home设置了。如果没有,请使用相应的路径在下面运行以设置ant_home

export ANT_HOME=/ade_autofs/gd29_3rdparty/ANT_1.7.1_GENERIC.rdd/080925/ant 
export PATH=$ANT_HOME/bin:${PATH}
于 2021-01-27T08:05:56.690 回答
0

在我的情况下lib,包含所有 jar 的 ' ' 文件夹,包括

ant-launcher.jar

/usr/local/Cellar/ant/1.9.6/libexec/ 

我复制了lib文件夹下

/usr/local/Cellar/ant/1.9.6/

因为在运行 'ant --execdebug' 之后,我发现 ant 命令正在寻找 '1.9.6' 文件夹下的 'lib' 文件夹。

在那之后改变蚂蚁命令开始工作正常。

于 2016-06-06T13:39:25.870 回答