Foros del Web » Programación para mayores de 30 ;) » Java »

Dividir aplicacion en varios jar

Estas en el tema de Dividir aplicacion en varios jar en el foro de Java en Foros del Web. Hola, tengo el siguiente problema: Quiero dividir mi aplicación en dos jar. Por un lado las clases de mi aplicación, y por otro lado, los ...
  #1 (permalink)  
Antiguo 27/05/2008, 21:34
Avatar de pyanqn  
Fecha de Ingreso: noviembre-2005
Mensajes: 331
Antigüedad: 18 años, 5 meses
Puntos: 8
Exclamación Dividir aplicacion en varios jar

Hola, tengo el siguiente problema:

Quiero dividir mi aplicación en dos jar. Por un lado las clases de mi aplicación, y por otro lado, los archivos tales como imágenes.

Hasta el momento tengo todo en un mismo proyecto, organizado algo asi:

miproj.persona.persona.class
miproj.persona.FormPersona.class
miproj.empresa.empresa.class
miproj.empresa.FormEmpresa.class
miproj.principal.App.class (Clase principal)
-----------------------------------------------------Aqui deseo separar en 2 jar
miproj.recursos.exit.png
miproj.recursos.crear.png
miproj.recursos.editar.png
miproj.recursos.eliminar.png

El asunto es que le primer jar, es el que tiene la información en el Manifest, para reconocer al segundo jar, pero al ejecutar me encuentro con un error:

java.lang.NullPointerException
at javax.swing.ImageIcon.<init>(Unknown Source)

Y esto es porque estoy tratando de acceder a una imagen que esta en el segundo jar.

La forma de acceder a las imagenes es la siguiente:

ClassLoader classLoader = this.getClass().getClassLoader();
private Icon i_exit = new ImageIcon(classLoader.getResource("miproj/recursos/exit.png"));

Necesito me orienten un poco mas. gracias
  #2 (permalink)  
Antiguo 27/05/2008, 23:06
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Respuesta: Dividir aplicacion en varios jar

Hola:

No te lo puedo garantizar, pero quizás el problema es que debes obtener el ClassLoader de una clase que esté dentro del jar de imágenes. Quizás el ClassLoader de una clase sea el de su jar. Supongo que podrías hacer una prueba para ver si es así.

Prueba también, por ejemplo, con ClassLoader.getSystemClassLoader().

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #3 (permalink)  
Antiguo 28/05/2008, 00:42
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: Dividir aplicacion en varios jar

No estoy seguro que con el SystemClassLoader te la encuentre, ya puede que no este en el classpath de systema, pero lo que si es cierto es que cada Jar tiene su propio Classloader, asi que para encontrar las imagenes, en vez de "this.getClass().getClassLoader();", pon una clase en el otro jar, aunque solo sea "Utils" y haz Utils.class.getClassLoader().

Algo que se suele hacer es empaquetar las imagenes junto con una clase que sirve de utilidad para cargarlas (por ejemplo guardando los nombres de las imagenes como constantes y asi independienzando el resto del codigo del nombre fisico del fichero, etc.) Y esta misma clase es la que tiene el enlace al classloader para cargar las imagenes.

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #4 (permalink)  
Antiguo 28/05/2008, 06:51
Avatar de pyanqn  
Fecha de Ingreso: noviembre-2005
Mensajes: 331
Antigüedad: 18 años, 5 meses
Puntos: 8
Respuesta: Dividir aplicacion en varios jar

he probado lo que me sugiere GreenEyed, pero aun tengo un problema, no me encuentra la clase Utils del jar que contiene los iconos!

este es mi archivo de manifest que adjunto al jar principal

Manifest-Version: 1.0
Class-Path: Recursos.jar
Main-Class: miproj.principal.App

He tomado la precausion de dejar salto de linea despues de Main-Class.
Los dos jar se encuentran en el mismo directorio.

el error es el siguiente:

Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: miproj/recur
sos/Utils

Algo se me esta escapando... uso JDK - JRE 1.6
  #5 (permalink)  
Antiguo 28/05/2008, 09:29
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: Dividir aplicacion en varios jar

¿Dentro de Recursos.jar, tienes la clase Utils.class dentro de un directorio miproj dentro de un directorio recursos?

En compilacion, ¿compilas la clase App usando Recursos.jar? Simplemente para ver si el jar esta bien construido y se encuentra la clase.

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #6 (permalink)  
Antiguo 29/05/2008, 05:30
Avatar de pyanqn  
Fecha de Ingreso: noviembre-2005
Mensajes: 331
Antigüedad: 18 años, 5 meses
Puntos: 8
Respuesta: Dividir aplicacion en varios jar

Correcto, dentro del jar Recursos.jar, tengo la calse Utils.class y todas las imágenes, en el paquete miproj.recursos.

Esto es porque todo esta dentro del mismo proyecto, lo que hago es utilizar filtros para agregar o quitar cosas de los jar. De esta forma, indico que el jar Recursos.jar, solo contiene a miproj.recursos.*. El otro jar contiene al resto de la aplicación.

De todas formas. tambien probe poner a miproj.recursos y todo su contenido en un proyecto nuevo. el problema es el mismo, por lo cual descarto que pueda tratarse de los filtros.

Uso JBuilder 2006.
  #7 (permalink)  
Antiguo 29/05/2008, 06:33
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: Dividir aplicacion en varios jar

Ummm, ahora que lo veo, el error es NoClassDefFoundError, no ClassNotFoundError. Lo cual a veces se da cuando la clase se encuentra en el classpath pero da error por estar duplicada o tener otro problema. En el jar original, no estara la clase tambien, ¿no?

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #8 (permalink)  
Antiguo 29/05/2008, 06:47
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: Dividir aplicacion en varios jar

Acabo de hacer una prueba rapida y a mi me funciona, encontrar una clase desde otra en otro jar.
Si quito el jar, me da
Exception in thread "main" java.lang.NoClassDefFoundError: test/Loader
...
Caused by: java.lang.ClassNotFoundException: test.Loader
...

No se que es lo que te estara pasando.

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #9 (permalink)  
Antiguo 29/05/2008, 07:37
Avatar de pyanqn  
Fecha de Ingreso: noviembre-2005
Mensajes: 331
Antigüedad: 18 años, 5 meses
Puntos: 8
Respuesta: Dividir aplicacion en varios jar

correcto, reviso el jar, y no esta en el. los filtros han quitado todo el paquete.
Pense que el problema venia por ahi, porque generaba los dos jar desde el mismo proyecto, pero manejando los filtros.

Cuando elimine ese paquete y arme un nuevo proyecto con la clase Utils y todos los archivos de imagen, me ocurrió lo mismo. Por supuesto importe el jar para que el proyecto principal me resuelva las referencias.

El problema continua.

¿Podrías decirme que has puesto en el manifest de tu jar principal?

Seguiré con las pruebas. supongo que se puede tratar de algún mal seteo en la generación del jar con el jbuilder.
  #10 (permalink)  
Antiguo 29/05/2008, 23:49
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: Dividir aplicacion en varios jar

Nada raro. He puesto lo minimo:
Cita:
Manifest-Version: 1.0
Class-Path: App2.jar
Main-Class: test.App
Los .jar los he hecho con el Eclipse pero los he retocado "a mano", al fin y al cabo no es mas que hacer un zip con unos ficheros especiales.

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:35.