Author Topic: (SOLUCIONADO) java.lang.classnotfoundexception com.mysql.jdbc.driver  (Read 44330 times)

remizero

  • Jr. Member
  • **
  • Posts: 66
  • Karma: 0
    • View Profile
    • Blog personal de programación y linux
Buenas amigos del foro.

Esta vez traigo un problema que estoy tratando de resolver desde hace varios días y hasta ahora no he podido.

Como muestra el título, ese es mi problema, tengo el proyecto funcionando a la perfección pero cuando creo los archivos jar, aquí es cuando se me presenta el problema.

Tengo que decir que la estructura del proyecto es el siguiente:

Code: [Select]
sistema/api/controlador.jar
sistema/librerias/basededatos/mysql-connector-java-5.1.15-bin.jar
sistema/bin/aplicacion.jar

Cuando ejecuto aplicacion.jar este llama a controlador.jar y a su vez este a mysql-connector-java-5.1.15-bin.jar, el problema se presenta cuando en controlador.jar intento crear una instancia del driver de mysql, hago lo siguiente:

Code: [Select]
Class.forName ( "com.mysql.jdbc.Driver" ).newInstance ();

Como dice el título me devuelve este error

Code: [Select]
java.lang.classnotfoundexception com.mysql.jdbc.driver

Por otro lado en el archivo MANIFEST.MF estoy indicando el Class-path y estoy importando las clases necesarias, de la siguiente manera:

Code: [Select]
Class-path: ../librerias/basededatos/mysql-connector-java-5.1.15-bin.jar
Import-Package: com.mysql.jdbc.Driver

El código funciona a la perfección en eclipse, pero cuando genero los jar se presenta este error.

Si me pueden dar una pista de como resolver el problema se los agradecería, o algo que me ayude a entender mejor el funcionamiento de llamada del driver vía Class.forName ("") desde archivos jar, que creo que ahí es donde esta el problema pero no encuentro alguna solución.

Desde ya muchas gracias.
« Last Edit: Mayo 24, 2011, 01:31:26 am by remizero »
Si quieres ver cambios, comienza por cambiar tu primero
http://www.remizero.blogspot.com/
http://www.ecosoftware.com.ve/

chuidiang

  • Administrator
  • Hero Member
  • *****
  • Posts: 5472
  • Karma: 12
    • View Profile
    • Apuntes de programación
Re: java.lang.classnotfoundexception com.mysql.jdbc.driver
« Reply #1 on: Mayo 19, 2011, 03:55:08 pm »
Hola:

Dentro de manifiesto pones el Class-path con path relativo a la ubicación del jar que contiene ese fichero de manifiesto. Hablas de un aplicacion.jar que no sé si es el que tiene el fichero de manifiesto o no. Lo unico es que donde este ese jar que arrancar (aplicacion.jar) en ese path relativo debe encontrarse el connector. Quita el Import-Package, no hace falta.

Se bueno.

remizero

  • Jr. Member
  • **
  • Posts: 66
  • Karma: 0
    • View Profile
    • Blog personal de programación y linux
Re: java.lang.classnotfoundexception com.mysql.jdbc.driver
« Reply #2 on: Mayo 20, 2011, 01:29:14 am »
Hola chuidiang, gracias por responder.

El Class-path del manifiesto lo tengo como comenté anteriormente:

Code: [Select]
Class-path: ../librerias/basededatos/mysql-connector-java-5.1.15-bin.jar

Pido disculpas por no explicar bien esta parte.
El archivo(fichero) que contiene el manifiesto es el controlador.jar, porque es él quien hace todo el trabajo de establecer la conexión (mi lógica me dice que debe ser así, puedo estar equivocado)

En efecto, en esa dirección se encuentra el conector (mysql-connector-java-5.1.15-bin.jar), gracias por el aviso, no sabía que no era necesario colocar el Import-Package.

Para identificar mejor la distribución de los archivos esta es la estructura del sistema:

Code: [Select]
sistema/api/controlador.jar

sistema/librerias/basededatos/mysql-connector-java-5.1.15-bin.jar

sistema/bin/aplicacion.jar

y este es el archivo manifiesto original completo para ver si ahí tengo algún otro error:

Code: [Select]
Manifest-Version: 1.0
Class-path: . ECO-API-archivos.jar ECO-API-calendario.jar ECO-API-mensajes.jar
 ECO-API-sistema.jar ../librerias/basededatos/commons-dbcp-1.4.jar
 ../librerias/basededatos/derby.jar ../librerias/basededatos/derbyclient.jar
 ../librerias/basededatos/hsqldb.jar ../librerias/basededatos/jaybird-full-2.1.6.jar
 ../librerias/basededatos/mysql-connector-java-5.1.15-bin.jar
 ../librerias/basededatos/ojdbc6.jar
 ../librerias/basededatos/postgresql-9.0-801.jdbc4.jar
 ../librerias/basededatos/sqlitejdbc-v056.jar ../librerias/basededatos/sqljdbc.jar
 ../librerias/basededatos/sqljdbc4.jar ../librerias/log4j/log4j-1.2.16.jar
Export-Package: com.ecosoftware.api.basededatos.APIBD;version="1.0",
 com.ecosoftware.api.basededatos.Conexion;version="1.0",
 com.ecosoftware.api.basededatos.SQL.EjecutarSQL;version="1.0",
 com.ecosoftware.api.basededatos.SQL.ErroresSQL;version="1.0",
 com.ecosoftware.api.basededatos.SQL.SentenciaSQL;version="1.0",
 com.ecosoftware.api.basededatos.comunes.Imagenes;version="1.0",
 com.ecosoftware.api.basededatos.estructura.ConstantesBD;version="1.0",
 com.ecosoftware.api.basededatos.estructura.Motor;version="1.0",
 com.ecosoftware.api.basededatos.estructura.MotorFactory;version="1.0",
 com.ecosoftware.api.basededatos.motores.Access;version="1.0",
 com.ecosoftware.api.basededatos.motores.ApacheDerby;version="1.0",
 com.ecosoftware.api.basededatos.motores.ApacheDerbyS;version="1.0",
 com.ecosoftware.api.basededatos.motores.DB2ExpressC;version="1.0",
 com.ecosoftware.api.basededatos.motores.Firebird;version="1.0",
 com.ecosoftware.api.basededatos.motores.FirebirdS;version="1.0",
 com.ecosoftware.api.basededatos.motores.Hsqldb;version="1.0",
 com.ecosoftware.api.basededatos.motores.HsqldbS;version="1.0",
 com.ecosoftware.api.basededatos.motores.Mysql;version="1.0",
 com.ecosoftware.api.basededatos.motores.Oracle;version="1.0",
 com.ecosoftware.api.basededatos.motores.Paradox;version="1.0",
 com.ecosoftware.api.basededatos.motores.Postgresql;version="1.0",
 com.ecosoftware.api.basededatos.motores.SqlServer;version="1.0",
 com.ecosoftware.api.basededatos.motores.Sqlite;version="1.0",
 com.ecosoftware.api.basededatos.reflection.ReflectionBD;version="1.0"
Import-Package: com.ecosoftware.api.archivo.xml.XML,
 com.ecosoftware.api.calendario.ConvertirFechas,
 com.ecosoftware.api.calendario.Fecha,
 com.ecosoftware.api.calendario.Hora,
 com.ecosoftware.api.calendario.UtilidadesCalendario,
 com.ecosoftware.api.mensajes.Mensajes,
 com.ecosoftware.api.sistema.SO,
 org.apache.log4j.Logger,
 org.apache.log4j.PropertyConfigurator,
 com.mysql.jdbc.Driver

Gracias nuevamente por la ayuda prestada y la que me puedan dar.
Si quieres ver cambios, comienza por cambiar tu primero
http://www.remizero.blogspot.com/
http://www.ecosoftware.com.ve/

chuidiang

  • Administrator
  • Hero Member
  • *****
  • Posts: 5472
  • Karma: 12
    • View Profile
    • Apuntes de programación
Re: java.lang.classnotfoundexception com.mysql.jdbc.driver
« Reply #3 on: Mayo 20, 2011, 02:24:59 am »
Si aplicacion.jar es el que tiene el main, es aplicacion.jar el que tiene que tener el fichero de manifiesto con TODAS las dependencias en el Class-Path y con paths relativos a aplicacion.jar.

Se bueno.

remizero

  • Jr. Member
  • **
  • Posts: 66
  • Karma: 0
    • View Profile
    • Blog personal de programación y linux
Re: java.lang.classnotfoundexception com.mysql.jdbc.driver
« Reply #4 on: Mayo 24, 2011, 01:30:56 am »
Ya lo hé solucionado.

Tenias razón chuidiang, debía colocar la lista de dependencias en el manifiesto del main de la aplicación, pero con un detalle, también debo colocar estas dependencias en el controlador.jar (solo las que necesito dentro de este).

Hice lo que comentaste y así solo, no me funcionó, pero colocando las dependencias en ambos jar si funciona correctamente :).

En resumen, solo debo colocar esto en ambos jar:

Code: [Select]
Class-path: . ECO-API-archivos.jar ECO-API-calendario.jar ECO-API-mensajes.jar
 ECO-API-sistema.jar ../librerias/basededatos/commons-dbcp-1.4.jar
 ../librerias/basededatos/derby.jar ../librerias/basededatos/derbyclient.jar
 ../librerias/basededatos/hsqldb.jar ../librerias/basededatos/jaybird-full-2.1.6.jar
 ../librerias/basededatos/mysql-connector-java-5.1.15-bin.jar
 ../librerias/basededatos/ojdbc6.jar
 ../librerias/basededatos/postgresql-9.0-801.jdbc4.jar
 ../librerias/basededatos/sqlitejdbc-v056.jar ../librerias/basededatos/sqljdbc.jar
 ../librerias/basededatos/sqljdbc4.jar ../librerias/log4j/log4j-1.2.16.jar

Muchas gracias por la ayudita, hasta una proxima duda jeje
Si quieres ver cambios, comienza por cambiar tu primero
http://www.remizero.blogspot.com/
http://www.ecosoftware.com.ve/

 

ey