NoClassDefFoundError después de actualizar a Java 7

Recibo el NoClassDefFoundError después de ejecutar el archivo JAR de mi proyecto. La depuración con Eclipse funciona bien, pero recibo este error cada vez que uso el comando de Windows java -jar myproject.jardesde que instalé JDK 1.7.

Funcionaba bien con Java 1.6.

Aquí está el registro de errores:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/log4j/Layout
at program.Main.main(Main.java:20)
Caused by: java.lang.ClassNotFoundException: org.apache.log4j.Layout
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 1 more

Busqué en Google sobre eso pero no pude encontrar la solución correcta.

Lo que ya hice: -instalar Java 1.7, instalar 1.6 en su lugar -check el classpath -try en otra computadora (después de desinstalar Java 1.7 de él) -crear un proyecto vacío con una referencia a la biblioteca log4j => mismo problema

Y aquí está el archivo classpath:

<?xml version="1.0" encoding="UTF-8"?>
<classpath> 
<classpathentry kind="src" path="src"/> 
<classpathentry kind="con"path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
<classpathentry kind="lib" path="lib/RXTXcomm.jar"/> 
<classpathentry kind="lib" path="lib/log4j-1.2.15.jar"/> 
<classpathentry kind="output" path="bin"/> 
</classpath>

¿Tienes alguna idea de qué más debo hacer?

Gracias,

Nils

EDITAR: si exporto el proyecto como un "JAR ejecutable" en lugar de un simple "JAR", el programa se inicia pero no puedo usar otra biblioteca que estoy usando (RxtxComm). Aquí está el registro que obtengo:

java.lang.UnsatisfiedLinkError: no rxtxSerial in java.library.path thrown while loading gnu.io.RXTXCommDriver

EDIT2: Finalmente resolví el último problema colocando el rxtxSerial.dll en la carpeta Windows / system32. Pero aún así, no entiendo por qué ya no funciona si exporto mi proyecto como un archivo JAR y por qué necesito usar el archivo dll ahora.

Respuesta 1

¿Estás seguro de que el jar de log4j está en el classpath cuando ejecutas tu archivo jar? Comprueba que:

  • tiene una variable de sistema CLASSPATH que contiene, entre otros, la carpeta donde se encuentra el jar de log4j

  • pasas esa carpeta jar log4j como argumento al iniciar el jar

    java -jar yourJar.jar -classpath c: \ myLog4JJarFolder

ACTUALIZAR:

Según el comentario de Andrew Thompson, usar el argumento -jar hará que su argumento -classpath sea inútil (se ignorará). Para poder especificar el classpath en la línea de comando, también debe usar el nombre completo de su clase principal como argumento de lanzamiento:

java -classpath "c:\dir1;c:\dir2" package.subPackage.MainClass
Respuesta: 2

Necesito verificar el título de una página web después de iniciar sesión. Usando el controlador de Chrome para el selenio, el título de la página después de iniciar sesión es correcto, pero no el controlador de Firefox. El resto del código permanece igual, ...

¿Necesita devolver objetos diferentes en el mismo método? ¿Es posible devolver? public class Smoketest () {objeto protegido getLabTopology () {if (labTopology == null) {...

He creado el Servicio en Android y se está ejecutando cuando voy a MapActivity. Si regreso de MapActivity con el botón Atrás, quiero detener el servicio. ¿como hacer eso?

Estoy creando código para ayudarme con la tarea, pero hay un problema con la clase 'C'. Me sigue dando salida de NaN, ¿puedes mirarlo y decirme qué estoy haciendo mal? Lo reviso dos veces y ...