What is wrong with my ant configuration?

2019-01-18 01:46发布

I installed Ant on a Fedora 5 machine using yum, but Ant does not launch. I get this error message:

[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.

I have set the following environment variables:

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

Ant is installed at /usr/bin/ant.

I have also come across this post, and it seems that the JAVAVER_LIBDIR variable does not point to something that exists. I set a symbolic link, like the post suggests cleared the issue up for the author, but it did not fix things for me.

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

Edit: I have also set a symbolic link that addressed a similar problem with the JAVAVER_JNIDIR variable:

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

I now get a different error message:

[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

Off to Google these error messages...

标签: ant fedora
11条回答
做个烂人
2楼-- · 2019-01-18 02:14

In my case 'lib' folder which has all jars including

ant-launcher.jar

was under

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

I copied lib folder under

/usr/local/Cellar/ant/1.9.6/

because after running 'ant --execdebug' i found ant commands are looking for 'lib' folder under '1.9.6' folder.

after that change ant commands started working fine.

查看更多
够拽才男人
3楼-- · 2019-01-18 02:22

I've just met similar issue on Fedora 18.

To make long story short, run:

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

Apparently, this problem is specific to java-1.7.0-openjdk because similar empty directories for all other JDK versions existed.


DETAILS

There was single-line error after running ant:

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

The problem was somewhere in /usr/share/java-utils/java-functions script which tried to set JAVAVER_JNIDIR/JAVAVER_LIBDIR variables to refer to the directories above. Due to inappropriate error message redirection to stdout, some variables got assignments like:

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

Creating the directories according to the convention set by all other java versions is the cleanest solution.

查看更多
Ridiculous、
4楼-- · 2019-01-18 02:25

I had such problem on Fedora 16 but in my case xerces packages and xml-commons-apis was ok. Actually, --execdebug is very helpful and it printed that ant cannot find a directory at /usr/lib/jvm-exports/YOUR_JDK. This was because I switched from openjdk to oracle's jdk and the directory of former version of jdk (/usr/lib/jvm-exports/java-1.6.0-openjdk-1.6.0.0) left there but there was not the one of my current version (/usr/lib/jvm-exports/jdk1.6.0_32). These directories includes only a bunch of soft links that point to particular jre's jars so I've taken following steps:

  1. create a new directory for current version of jdk (jdk1.6.0_32)
  2. copy all links from the openjdk's directory to the new directory
    # cp -av java-1.6.0-openjdk-1.6.0.0.x86_64/* jdk1.6.0_32/
  3. correct all of them so as they are pointing on oracle's jars, example:
    # cd /usr/lib/jvm-exports/jdk1.6.0_32
    # ln -s -f $JAVA_HOME/jre/lib/rt.jar jaas-1.6.0.0.jar

Obviously, $JAVA_HOME is set correctly (on the new jdk version). It solved my problem and can be another cause excepting the causes mentioned above.

查看更多
倾城 Initia
5楼-- · 2019-01-18 02:26

I think that the ANT_HOME should be set with '/usr/bin/ant'. I have that configuration (CENTOS 5).

My sh script under '/etc/profile.d' has this conf.:

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

I hope it helps you.

查看更多
一纸荒年 Trace。
6楼-- · 2019-01-18 02:27

I had a similar problem but the following fixed it for me:

sudo yum install xml-commons-apis
查看更多
登录 后发表回答