我使用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
。
我也遇到this post,似乎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
向Google发送这些错误消息...
答案 0 :(得分: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
变量来引用上面的目录。由于不正确的错误消息重定向到stdout,一些变量得到了如下的分配:
LOCALCLASSPATH='/usr/bin/build-classpath: error: JAVAVER_JNIDIR /usr/lib/java-1.7.0 does not exist or is not a directory'
根据所有其他Java版本设置的约定创建目录是最干净的解决方案。
答案 1 :(得分: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
答案 2 :(得分:11)
我认为应该使用'/ usr / bin / ant'设置ANT_HOME。我有那个配置(CENTOS 5)。
我在'/etc/profile.d'下的sh脚本有这个conf。:
export JAVA_HOME="/usr/local/java";
export ANT_HOME="/usr/local/ant";
我希望它可以帮到你。
答案 3 :(得分:6)
我有类似的问题,但以下修复了它:
sudo yum install xml-commons-apis
答案 4 :(得分:4)
我今天收到了相同的错误消息,但是由不同的原因触发了。
就我而言,在我更新到OpenJDK 1.8.0后,我再也无法运行ant了。
问题在于java -fullversion
命令的输出略有改变,而/usr/share/java-utils/java-functions
不再正确理解它。
升级到最新版本的jpackage-utils
RPM为我解决了这个问题。
答案 5 :(得分: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罐子的软链接,所以我采取了以下步骤:
jdk1.6.0_32
)# cp -av java-1.6.0-openjdk-1.6.0.0.x86_64/* jdk1.6.0_32/
# 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版本上)。
它解决了我的问题,除了上面提到的原因外,还可能是另一个原因。
答案 6 :(得分:2)
尝试安装xerces-j2-xml-apis
答案 7 :(得分:2)
在我的情况下,我正在设置我的ANT_HOME
变量,但在系统路径中附加/bin/
- 此主变量不应该是二进制目录,请使用以下命令设置一个蚂蚁hime,并将二进制目录添加到env路径。
export ANT_HOME=/opt/apache-ant-1.9.4
export PATH=$ANT_HOME/bin:$PATH
答案 8 :(得分:1)
我在Suse,SLES 11上遇到了同样的问题.Hidayath的回答https://stackoverflow.com/a/4849302/1211900解决了这个问题。 假设开箱即用的软件包存储库: 我@ SLES:〜&GT; sudo zypper install xerces-j2-xml-apis
答案 9 :(得分:1)
我在OS X上有完全相同的错误消息,但是有人建议取消设置ANT_HOME并且这样做有效。 https://github.com/Homebrew/homebrew/issues/32851
答案 10 :(得分:0)
在我的情况下&#39; lib
&#39;包含所有罐子的文件夹,包括
ant-launcher.jar
在
之下/usr/local/Cellar/ant/1.9.6/libexec/
我在
下复制了lib文件夹/usr/local/Cellar/ant/1.9.6/
因为在跑完&ant; execdebug&#39;我发现蚂蚁命令正在寻找&#39; lib&#39; &#39; 1.9.6&#39;下的文件夹文件夹中。
在更改之后,ant命令开始正常工作。
答案 11 :(得分: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}