2010-01-29 11 views
10

Estoy tratando de ejecutar una tarea Java desde hormiga. Estoy intentando ejecutar la clase "org.apache.tools.ant.launch.Launcher". Sigo obteniendo el "NoClassDefFoundError" sin especificar ningún nombre de clase. También obtengo una "ClassNotFoundException" junto con la que muestra un mensaje "No se pudo encontrar la clase principal:. Program se cerrará". He aquí un fragmento del errorNoClassDefFoundError sin ningún nombre de clase

[java] Exception in thread "main" java.lang.NoClassDefFoundError: 
[java] Caused by: java.lang.ClassNotFoundException: 
[java] at java.net.URLClassLoader$1.run(URLClassLoader.java:200) 
[java] at java.security.AccessController.doPrivileged(Native Method) 
[java] at java.net.URLClassLoader.findClass(URLClassLoader.java:188) 
[java] at java.lang.ClassLoader.loadClass(ClassLoader.java:307) 
[java] at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
[java] at java.lang.ClassLoader.loadClass(ClassLoader.java:252) 
[java] at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320) 
[java] Could not find the main class: . Program will exit. 
[java] Java Result: 1 

Ahora estoy tratando de ejecutar una clase de hormigas a partir de un frasco de hormigas y me specifiy la ruta de clase, donde este archivo clase reside usando el atributo "classpathref", sin embargo sigo teniendo este mensaje. Revisé el contenedor de hormigas para verificar el Manifiesto y la clase "principal" se ha especificado correctamente (es "org.apache.tools.ant.launch.Launcher"). He agotado todos mis recursos. Por favor ayuda ! ! !

PS: Mi entorno es Eclipse en Ubuntu 9.04

Respuesta

0

partir de esta línea:

[java] Could not find the main class: . Program will exit. 

parece que su llamada a java.exe es encontrar un . donde se espera un nombre de clase. Tal vez esté tratando de indicar el classpath en la línea de comandos, pero está dejando de precederlo con el indicador -cp o -classpath.

+0

Esto es lo que tengo en build.xml Seagull

+1

@Safder. Tal vez deberías mostrar cómo se define 'webtest.lib'. –

1

Esto puede ser un error engañoso que en realidad no se trata de una clase que falta en el classpath. Si está utilizando Tomcat, puede deberse a archivos conf confidenciales en $ CATALINA_BASE/conf

También podría ser una instalación de hormiga mal configurada, compruebe las variables de entorno JAVA_HOME y ANT_HOME o intente con otra instalación ant.

5

Es muy probable que su classpath esté mal configurado.

Como mínimo el CLASSPATH debe incluir:

  • ant.jar y ANT-launcher.jar
  • tarros/clases para su analizador XML
  • archivos jar/zip requeridos del JDK

(del ant manual)

también parece ser el relanzamiento de hormigas en la corriente directorio (ejecutando el mismo build.xml). Tal vez quieras establecer la propiedad "dir".

1

lanzador hormiga espera los siguientes parametros

java -Dant.home=c:\ant org.apache.tools.ant.launch.Launcher [options] [target] 

estoy affraid no podemos proceder contestar que si no se pegue el archivo build.xml conjunto.

Sólo trate de dar su muestra completa de la siguiente manera:

<java 
      classname="org.apache.tools.ant.launch.Launcher" 
      fork="true" 
      failonerror="true" 
      dir="${sub.builddir}" 
      timeout="4000000" 
      taskname="startAnt" 
    > 
     <classpath> 
      <pathelement location="${ant.home}/lib/ant-launcher.jar"/> 
     </classpath> 
     <arg value="-buildfile"/> 
     <arg file="${sub.buildfile}"/> 
     <arg value="-Dthis=this"/> 
     <arg value="-Dthat=that"/> 
     <arg value="-Dbasedir=${sub.builddir}"/> 
     <arg value="-Dthe.other=the.other"/> 
     <arg value="${sub.target}"/> 
</java> 

Esto sería de gran ayuda para ofrecerle un posible malentendido.

Espero que esto ayude,

Ernani

4

Parece que la tarea Ant está intentando ejecutar Java, pero de alguna manera se pasa una cadena vacía a la JVM como el nombre de la clase para funcionar. Puedo obtener el mismo StackTrace si funciono la JVM directamente con una cadena vacía citado:

 
C:\>java "" 
Exception in thread "main" java.lang.NoClassDefFoundError: 
Caused by: java.lang.ClassNotFoundException: 
     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: . Program will exit. 

(Esto es en Windows, pero no creo que eso hace una gran diferencia.)

I solo puede sugerir el seguimiento del comentario de Alexander Pogrebnyak a la respuesta de akf. Tal vez la propiedad webtest.lib tiene espacios en ella?

Además, ¿hay una buena razón para llamar al ant directamente a través de java, en lugar de usar la tarea ant?

0

En caso de duda, invoque ant -v y mire todas sus declaraciones de variables, y toda la línea de comandos enviada a Java.

Ciertas cantidades parecidas a las rutas se evalúan con entusiasmo, mientras que otras se evalúan con pereza. He tenido muchos problemas donde utilicé uno de los primeros, cuando mi script Ant tenía la intención de crear un jar que sería utilizado por una tarea posterior. Luego, cuando invoqué la llamada, ya había borrado mi jar del classpath.

Si tuviera que hacer una conjetura salvaje, me gustaría apostar su línea de comandos se veía algo así como:

java -classpath ... org.apache.tools.ant.launch.Launcher

en lugar de

java -classpath ... foo.jar; bar.jar org.apache.tools.ant.launch.Launcher

como usted esperaba

3

https://blogs.oracle.com/sreekanth/entry/java_lang_noclassdeffounderror_org_codehaus

java.lang.NoClassDefFoundError: org/codehaus/plexus/classworlds/launcher/Launcher 
By sreekanth on Nov 23, 2010 

Recientemente, cuando estoy tratando de ejecutar algunos scripts Maven, que estoy recibiendo esta excepción:

Exception in thread "main" java.lang.NoClassDefFoundError: org/codehaus/plexus/classworlds/launcher/Launcher 

Caused by: java.lang.ClassNotFoundException: org.codehaus.plexus.classworlds.launcher.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.codehaus.plexus.classworlds.launcher.Launcher. Program will exit. 

Después de pasar algún tiempo tratando diferentes combinaciones, he encontrado que esto es porque tengo tanto M2_HOME y M3_HOME establecido en mis variables de entorno. Una vez que eliminé M2_HOME de las variables de mi entorno, pude hacer que funcionara de nuevo. Podría ser que esto podría ahorrarle algo de tiempo a alguien.

0

Tuve un problema similar recientemente. Los culpables fueron 2 etiquetas bajo la tarea java, que no tenían sus valores establecidos, por lo que resultaron en 2 argumentos de comando vacíos y al final en 2 espacios en la línea de comando. Por algún motivo, Unix no lo maneja bien. Tanto Red Hat 5 como Ubuntu mostraron el mismo error. Estuvo bien en Windows 7. Establecer esos argumentos para tener valores ficticios predeterminados resolvió el problema.

Cuestiones relacionadas