Necesito ayuda con el class-path del manifest
Es la primera vez que entro a este foro, no se donde conlocar esta pregunta, estoy intentando crear un .exe para una aplicacion java, en el tutorial me indica como hacerlo, creando un .jar, no tengo mucha experiencia, pero buscando en internet encontre como crear el .jar, todo funciona bien, mi unico problema que no detecta la libreria de la conexion de java con mysql.
Este es mi manifest
Main-Class: baseventasMenufinal
Class-Path: mysql-connector-java-5.0.8-bin.jar
X-COMMENT: Mi primer archivo
El conector de mysql no se encuentra dentroo de mi .jar, se encuentro dentro de la misma carpeta, pero aun asi no funciona, no se que estoy haciendo mal o si me falta hacer algo.
Este es el error que me sale cuando lo ejecuto
java -jar myjar.jar
Exception in thread "main" java.lang.NoClassDefFoundError: org/aspectj/lang/Sign
ature
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at baseventasADfinal.(baseventasADfinal.java:30)
at baseventasMenufinal.(baseventasMenufinal.java:21)
at baseventasMenufinal.main(baseventasMenufinal.java:133)
Caused by: java.lang.ClassNotFoundException: org.aspectj.lang.Signature
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at sun.misc.Launcher$ExtClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 5 more
baseventasMenufinal es el main principal de mi aplicacion, baseventasADfinal, aqui creo la conexion con mysql.
public class baseventasADfinal extends baseventasDPfinal {
Statement st;
Connection conexion;
public baseventasADfinal() {
try {
Class.forName("com.mysql.jdbc.Driver");
conexion = DriverManager.getConnection("jdbc:mysql://localhost/movedb", "root", "sergio");
}
catch (ClassNotFoundException cnfe) {
System.out.println("Fallo la conexion con la base de datos...");
}
catch (SQLException sqle) {
System.out.println("No se realizo la conexion con la base de datos");
}
}
Cualquier ayuda la agradecere mucho.
- Inicie sesión o regístrese para enviar comentarios
classpath del manifest
El classpath del manifest indica archivos que deben estar en el filesystem AFUERA del JAR, no puedes apuntar a jars dentro del jar.
Documentación oficial
Mira, mi carpeta se llama
Mira, mi carpeta se llama jar, dentro de esta carpeta tengo lo siguiente
mysql-connector-java-5.0.8-bin-g.jar
myjar.jar (aqui tengo mis .class junto con el manifest, el conector de mysql no esta dentro de myjar.jar)
Este es mi manifest
Manifest-Version: 1.0
Created-By: SVT
Main-Class: baseventasMenufinal
Class-Path: mysql-connector-java-5.0.8-bin.jar
X-COMMENT: Mi primer archivo
Es decir, lei que podia poner la direccion de donde se localiza mi conector, segun entiendo, myjar.jar se encuentra en la misma carpeta en donde se encuentra el conector, pero no funciona.
y la g apá?
Dices que tienes un jar y haces referencia a otro?
Además de lo que dice
Además de lo que dice @ezamudio, no creo que la excepción se produzca porque no encuentra el MySQL driver, de hecho, la excepción apunta a otra clase:
Exception in thread "main" java.lang.NoClassDefFoundError: org/aspectj/lang/Signature
Ahh, dejame checar, espero
Ahh, dejame checar, espero ese sea el erro :P
No soy muy bueno en java, la
No soy muy bueno en java, la verdad ese error no entiendo a que se refiere. Yo utilizo el jcreator, ahi compilo y ejecuto y funciona mi aplicacion.
RTFS
No soy muy bueno en java, la verdad ese error no entiendo a que se refiere
Te recomiendo ampliamente que leas este artículo entonces. Java te da mucha información cuando arroja una excepción.
Estoy copiando el codigo,
Estoy copiando el codigo, haber si podrian ver algun error que tenga.
baseventasManufinal, esta es mi clase main ------------------------------------------------------------------------------------------------------------------------------------------
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.event.ActionListener;
public class baseventasMenufinal2 extends JFrame implements ActionListener {
GridBagConstraints constraints;
JLabel labelRelleno;
JButton bProspectos;
JButton bVisitas;
JButton bAsesores;
JButton bCoordinadores;
JButton bConsultas;
JButton bSalir;
baseventasADfinal AD = new baseventasADfinal();
public baseventasMenufinal2() {
super ("Ventas ARL");
this.getContentPane().setLayout(new GridBagLayout());
constraints = new GridBagConstraints();
labelRelleno = new JLabel(" ");
constraints.gridx = 0;
constraints.gridy = 0;
constraints.gridwidth = 1;
constraints.gridheight = 1;
this.getContentPane().add (labelRelleno, constraints);
bProspectos = new JButton("Prospectos");
constraints.gridx = 1;
constraints.gridy = 1;
constraints.gridwidth = 1;
constraints.gridheight = 1;
bProspectos.addActionListener(this);
this.getContentPane().add (bProspectos, constraints);
bAsesores = new JButton("Asesores");
constraints.gridx = 1;
constraints.gridy = 2;
constraints.gridwidth = 1;
constraints.gridheight = 1;
bAsesores.addActionListener(this);
this.getContentPane().add (bAsesores, constraints);
bCoordinadores = new JButton("Coordinadores");
constraints.gridx = 1;
constraints.gridy = 3;
constraints.gridwidth = 1;
constraints.gridheight = 1;
bCoordinadores.addActionListener(this);
this.getContentPane().add (bCoordinadores, constraints);
bConsultas = new JButton("Consultas");
constraints.gridx = 1;
constraints.gridy = 4;
constraints.gridwidth = 1;
constraints.gridheight = 1;
bConsultas.addActionListener(this);
this.getContentPane().add (bConsultas, constraints);
bSalir = new JButton("Salir");
constraints.gridx = 1;
constraints.gridy = 5;
constraints.gridwidth = 1;
constraints.gridheight = 1;
bSalir.addActionListener(this);
this.getContentPane().add (bSalir, constraints);
labelRelleno = new JLabel(" ");
constraints.gridx = 3;
constraints.gridy = 6;
constraints.gridwidth = 1;
constraints.gridheight = 1;
this.getContentPane().add (labelRelleno, constraints);
setSize(200,300);
setVisible(true);
}
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equals("Prospectos")) {
new baseventasCapturaVisitasfinal();
}
if (e.getActionCommand().equals("Asesores")) {
new baseventasAsesorfinal();
}
if (e.getActionCommand().equals("Coordinadores")) {
new baseventasMenuCoordinadorfinal();
}
if (e.getActionCommand().equals("Consultas")) {
new baseventasConsultasfinal("",false,false,false,"",0,0);
}
if (e.getActionCommand().equals("Salir")) {
System.exit(0);
}
}
public static void main(String[] args) {
baseventasMenufinal2 ventas = new baseventasMenufinal2();
}
}
baseventasADfinal, aqui manejo mi conexion a la base de datos, consultas, capturas, etc-------------------------------------------------------------------------
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import java.util.*;
import java.sql.*;
import java.util.Date;
import java.text.SimpleDateFormat;
import javax.swing.border.*;
import java.sql.*;
public class baseventasADfinal2 extends baseventasDPfinal {
Statement st;
Connection conexion;
public baseventasADfinal2() {
try {
Class.forName("com.mysql.jdbc.Driver");
conexion = DriverManager.getConnection("jdbc:mysql://localhost/movedb", "root", "sergio");
System.out.println("Conectado...");
}
catch (ClassNotFoundException cnfe) {
System.out.println("Fallo la conexion con la base de datos...");
}
catch (SQLException sqle) {
System.out.println("No se realizo la conexion con la base de datos");
}
}
void capturarDatos() {
try {
st = conexion.createStatement();
st.executeUpdate("INSERT INTO prospectos (CLNombre, CLApellidoPat, CLApellidoMat, CLNSS, CLPublicidad, CLPublicdescrip, CPromotor, CLVendedor, CLTelefono, CLtipoTel, CLTelefono2, CLtipoTel2, CLEmail, CLExt, CLExt2 ) VALUES ('"+getclNombre()+"','"+getclApellidoPat()+"','"+getclApellidoMat()+"','"+getclNss()+"','"+getclPublicidad()+"','"+getclPublicdescrip()+"','"+getclCoordinador()+"','"+getclAsesor()+"','"+getclTelefono()+"','"+getclTipotel()+"','"+getclTelefono2()+"','"+getclTipotel2()+"','"+getclEmail()+"','"+getclExt()+"','"+getclExt2()+"')");
st.close();
}
catch (SQLException sqle){
System.out.println(sqle);
}
}
}
baseventasDPfinal (aqui manejo datos, accesors y mutators, no puse todo, pero se aprecia que es lo que hago)-----------------------------------------------------
class baseventasDPfinal {
private String clNombre;
private String clApellidoPat;
private String clApellidoMat;
private String clNss;
private Integer clPublicidad;
private String clPublicdescrip;
private Integer clCoordinador;
private Integer clAsesor;
private Integer clTelefono;
private String clTipotel;
private Integer clTelefono2;
private String clTipotel2;
private String clEmail;
private String clDatos;
private Integer clidAsesor;
private String clNombreLider;
private Double clComision;
private String clNombrePublicidad;
private boolean clRadioBAsesor;
private boolean clRadioBNombre;
private boolean clRadioBCompleto;
private String clNombreConsulta;
private String clApellidoPatConsulta;
private String clApellidoMatConsulta;
private Integer clAsesorConsulta;
private Object[][] clConsultaDatos;
private String cltipoVisita;
private String cldescripcionVisita;
private Integer clExt;
private Integer clExt2;
private Integer clano;
private Integer clmes;
private Integer cldia;
/*** ACCESORS ***/
String getclNombre() {
return clNombre;
}
String getclApellidoPat() {
return clApellidoPat;
}
String getclApellidoMat() {
return clApellidoMat;
}
/*** MUTATORS ***/
void setclNombre(String var){
clNombre = var;
}
void setclApellidoPat(String var) {
clApellidoPat = var;
}
void setclApellidoMat(String var) {
clApellidoMat = var;
}
}
------------------------------------------------------------------------
Igual es un error muy simple, y ustedes al verlo me prodian señalarlo, gracias.
De tomas formas voy a leer la
De tomas formas voy a leer la liga que me indicas, gracias. Pero si encuentran un error muy grave en mi codigo, aprecio la ayuda, gracias.
código?
Ya tienes un jar hecho, por qué pones tu código? Eso sirve cuando no puedes compilar algo. Tu código compila bien, solamente que no corre, por razones que te explica el JDK en el mensaje de error que no quieres leer. Lee el artículo, y luego lee el mensaje de error, la respuesta está frente a ti.
Gracias por la ayuda, estoy
Gracias por la ayuda, estoy buscando la informacion que me arrojo el error.
Mira tu error dice: Exception
Mira tu error dice:
at java.lang.Class.forName0(Native Method)
>
Eso significa que en hilo principal "main" no se encontró la clase org.aspectj.lang.Signature
Si sigues los números de línea encontrarás que ocurre en la línea 30 de baseventasADfinal
Si luego utilizas google encontrarás la respuesta en un par de clicks, el problema casi siempre es no saber que buscar, pero en este caso puedes buscar por:
java.lang.NoClassDefFoundError: org/aspectj/lang/Signature mysql
Sale esto en el primer resultado
O sea que el programa que te pasaron es correcto en el manifest, pero la biblioteca del conector que pusiste ( o alguien puso pues ) está mal.
Prueba a ver si es eso.
Gracias, intente bajar un
Gracias, intente bajar un conector mas nuevo de mysql, descargue el mysql-connector-java-5.1.16-bin
Pero parece sigue pasando lo mismo, pero veo entender que el conector que estaba usando el nombre esta mal, o el archivo no es el correcto.
Y la linea 30 de mi codigo es
public baseventasADfinal() {
try {
linea 30 ------> Class.forName("com.mysql.jdbc.Driver");
conexion = DriverManager.getConnection("jdbc:mysql://localhost/movedb", "root", "sergio");
System.out.println("Conectado...");
}
catch (ClassNotFoundException cnfe) {
}
Por eso yo creia que el error principal es que mi class path estaba mal puesto, porque yo estoy creando mi aplicacion en jcreator, compilo y la conexion si funciona, todo funciona, cuando intento ejecutar el .jar es cuando ocurre esto.
De hecho sigo buscando el java.lang.NoClassDefFoundError, para ver que informacion puedo encontrar.
Aun no me funciona, pero aprecio mucho la ayuda. Gracias
¿Qué hace AspectJ en tu proyecto?
No he leído el código, y por tanto no se la razón de uso de una clase de AspectJ. Puede que algunas de las cosas que usas requiere de eso. El error que arroja dice: Exception in thread "main" java.lang.NoClassDefFoundError: org/aspectj/lang/Signature. Lo que indica que no encuentra la interfaz Signature en el paquete org.aspectj.lang. Esa clase la encuentras en aspectjrt.jar y por supuesto que ese jar debe estar primero en tu file system, y después en el classpath.
Si ese es el error, encuentras la distribución de AspectJ en http://www.eclipse.org/aspectj/
Al parecer es usada por el
Al parecer es usada por el driver de MySQL bferro, pero se supone ( según San Google ) que debe de haber un driver que ya lo incluya. Además que el classpath original del manifest no lo incluía ( asumiendo que el jar es heredado de algún otro lado )
Buena noticia para los que "queremos" a AspectJ
No sabía que el conector de MYSQL se haya diseñado con ayuda de algo tan bueno como AspectJ. El problema entonces de las broncas que tiene @SergioVT se resuelve con bajarlo y meterlo en el classpath.
Yeap, yo tampoco ( y el
Yeap, yo tampoco ( y el stacktrace no miente ) pero es lo que San Google arrojó y quién soy yo para dudar de él.
Entonces, si usa el conector
Entonces, si usa el conector de MySQL que termina con "g", si usaría las bibliotecas de AspectJ no?
Porque por lo que recuerdo, yo he usado el otro driver en proyectos sencillos, y no he tenido la necesidad de meter bibliotecas de aspectos ...
Sepa, pero si, el driver de
Sepa, pero si, el driver de MySQL debería de ser autónomo.
Ya pude hcerlo funcionar,
Ya pude hcerlo funcionar, estoy muy confundido, lo unico que hice, fue bajar otra version del mysql conector.
Mi manifest quedo asi
Manifest-Version: 1.0
Created-By: SVT
Main-Class: baseventasMenufinal
Class-Path: mysql-connector-java-5.1.16-bin.jar
X-COMMENT: Mi primer archivo
puse el conector mysql en la misma carpeta, y ya funciono. Probablemente el conector que tenia estaba mal el nombre.
Pero agradezco mucho la ayuda, y pues me sirvio de experiencia para aprender un poco mas de java.
Gracias
ese conector anterior lo baje
ese conector anterior lo baje de la pagina de mysql.
La autonomía no está reñida con usar cosas de terceros
Como casi todo lo que escribimos, el conector de Mysql tiene dependencias con otras más cosas que el core de Java. AspectJ ayuda a resolver cosas de una manera "más arquitectónica". Ya sé que este sitio es leído por algunos que odian eso que se llama "arquitectura de software", pero ni modo. Siempre he dicho que es un problema de "incomprensión" y ven al tema de arquitectura como algo que no es. A lo mejor y les conviene pasar conmigo un curso de Arquitectura de Software (que mam...!, dirán algunos)
@bferro: Será que el antispam
@bferro: Será que el antispam entiende tu cambio de estilo? Había marcado tu post como spam.
Todo parece indicar que habías bajado MySQl/MXJ
Todo parece indicar que habías bajado el MySQL Connector/MXJ que permite deploy y administración de MYSQL usando JMX. Ese producto sí requiere de AspectJ
Ya pude convertir mi
Ya pude convertir mi aplicacion a .exe, utilizando este tutorial http://www.slideshare.net/ajdgeniz/tutorial-jar-y-exe
Bastante facil de usar, pero tiene que funcionar el .jar, una vez creando el .exe ya desconozco que pasa, de donde jala el conector, lo empaqueta dentro del .exe? lo jala desde la libreria del jdk en la carpeta lib/ext?
Tengo que hacer algunas pruebas, comprendo que a muchos no les gusta convertir a .exe porque pierde la portabilidad de java, pero esto lo usare solo en computadoras con windows.
Hola Sergio.. Por lo general
Hola Sergio..
Por lo general son dos las estrategias que siguen este tipo de herramientas.
1) Asumen que el exe se ejecutará sobre una PC que ya contenga el JRE, si este es el caso , unicamente te empaquetan tus clases y los jars que requieres.
2) Asumen que el exe se ejecutará sobre una PC que no tiene instalado nada de nada y, si este es el caso, te empaquetan el JRE que tu le indiques.
Sí, tienes razón, no es muy bien visto parar a .exe pero, si tu aplicación o las condiciones de distribución lo requieren.... no pasa nada ;)
Podrías hecharle un ojo al tema de jars "ejecutables" (aprovechando que ya conoces al archivo MANIFEST), seguro te parecerá atractivo
Bienvenido a JavaMéxico.
Saludos!!!
---
RuGI