[Gvsig_desarrolladores] Error de linkage de librería fmap.jar al ejecutar mi extensión

Dani Gonzalez dani.gonzalez en geodata.es
Lun Abr 19 11:35:00 CEST 2010


Creía que esta línea estaba en mi config.xml, ya que recuerdo que esto se comenta en los manuales, pero por algún descuido la borré.

Muchas gracias, ya me funciona.

 

Daniel González Moratona

dani.gonzalez en geodata.es

________________________________

Geodata Sistemas, S.L.

Tecnologies de la informació geogràfica

Bac de Roda 136 1er 1a

08020 Barcelona

tel. 93 3035367 

http://www.geodata.es <http://www.geodata.es/> 

 

 

________________________________

De: gvsig_desarrolladores-bounces en listserv.gva.es [mailto:gvsig_desarrolladores-bounces en listserv.gva.es] En nombre de Cèsar Ordiñana
Enviado el: miércoles, 14 de abril de 2010 19:14
Para: Lista de Desarrolladores de gvSIG
Asunto: Re: [Gvsig_desarrolladores] Error de linkage de librería fmap.jar al ejecutar mi extensión

 

Hola Dani,

Para tener acceso a clases que se incluyen en otra extensión, como es el caso que planteas de fmap incluido en la extensión principal de gvSIG (appgvSIG), basta con que indiques en el config.xml que dependes de dicha extensión mediante algo como:


<?xml version="1.0" encoding="ISO-8859-1"?>
<plugin-config>
    <depends plugin-name="com.iver.cit.gvsig" />
...
</plugin-config>

Así, en ejecución, tendrás acceso desde tu extensión a todas las clases de los jars ubicados dentro de:

gvSIG\extensiones\com.iver.cit.gvsig\lib

Asegurate también que no incluyes dentro de tu extensión ningún jar que ya esté incluido en la extensión anterior ni en andami (gvSIG\lib).

Saludos,



-- 
Cèsar Ordiñana Navarro
gvSIG software architect
DiSiD Technologies (http://www.disid.com)


Dani Gonzalez escribió: 

Buenas tardes,

Tengo un proyecto de eclipse con dos extensiones (clases que heredan de la clase Extension), que me funcionan correctamente usando la última versión estable de gvSig 1.9 (build 1253) descargada desde el repositorio SVN. 

He desarrollado una tercera extensión que simplemente hace un backup de algunas propiedades de las capas que hay cargadas en el TOC a un fichero externo xml, ya que nos interesa poder guardar y restaurar algunas propiedades como por ejemplo los hiperenlaces, de forma parecida a como se puede hacer con los ficheros .gvl de la simbología.

 

Bien, el caso es que gvSig se ejecuta pero no me aparece la opción en el menú que tengo configurada en el "config.xml" de mi proyecto, y el motivo es que hay un error al localizar la clase com/iver/cit/gvsig/fmap/layers/XMLException:

 

DEBUG [AWT-EventQueue-1] (Launcher.java:812) - Initializing extensions from es.geodata.gvsig.tools

ERROR [AWT-EventQueue-1] (Launcher.java:874) - Error en localitzar la classe de l'extensióes.geodata.gvsig.backup.Backup

java.lang.NoClassDefFoundError: com/iver/cit/gvsig/fmap/layers/XMLException

      at java.lang.Class.getDeclaredConstructors0(Native Method)

      at java.lang.Class.privateGetDeclaredConstructors(Unknown Source)

      at java.lang.Class.getConstructor0(Unknown Source)

      at java.lang.Class.newInstance0(Unknown Source)

      at java.lang.Class.newInstance(Unknown Source)

      at com.iver.andami.Launcher.initializeExtensions(Launcher.java:842)

      at com.iver.andami.Launcher.access$6(Launcher.java:807)

      at com.iver.andami.Launcher$3.run(Launcher.java:369)

      at java.awt.event.InvocationEvent.dispatch(Unknown Source)

      at java.awt.EventQueue.dispatchEvent(Unknown Source)

      at com.iver.andami.ui.AndamiEventQueue.dispatchEvent(AndamiEventQueue.java:58)

      at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)

      at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)

      at java.awt.EventDispatchThread.pumpEvents(Unknown Source)

      at java.awt.EventDispatchThread.pumpEvents(Unknown Source)

      at java.awt.EventDispatchThread.run(Unknown Source)

 INFO [AWT-EventQueue-1] (Launcher.java:855) - Initializing es.geodata.gvsig.carrerer.Geocodificacion...

 INFO [AWT-EventQueue-1] (Launcher.java:855) - Initializing es.geodata.gvsig.tools.Main...

 

Esta clase es necesaria en mi extensión debido a que estoy usando la clase Marchaller de la librería castor, que permite serializar un objeto a un fichero XML usando su método marshall(), que es el método que lanza XMLException y que capturo en un try/catch. 

 

Para solucionar este problema, he añadido un task de Ant en el build.xml que copia fmap.jar al directorio "dist" que luego se mueve a Andami junto con el resto de las extensiones del proyecto. 

Entonces ya aparece la opción en el menú, pero al hacerle clic y ejecutarse la extensión, aparece este otro error:

 

 

DEBUG [AWT-EventQueue-1] (NotificationManager.java:104) - PluginServices.Error grave de la aplicación.  

 Es conveniente que salgas de la aplicación

java.lang.LinkageError: Class com/iver/cit/gvsig/fmap/MapContext violates loader constraints

      at java.lang.ClassLoader.defineClass1(Native Method)

      at java.lang.ClassLoader.defineClass(Unknown Source)

      at java.security.SecureClassLoader.defineClass(Unknown Source)

      at java.net.URLClassLoader.defineClass(Unknown Source)

      at java.net.URLClassLoader.access$100(Unknown Source)

      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 com.iver.andami.plugins.PluginClassLoader.loadClass(PluginClassLoader.java:242)

      at java.lang.ClassLoader.loadClass(Unknown Source)

      at java.lang.ClassLoader.loadClassInternal(Unknown Source)

      at es.geodata.gvsig.backup.Backup.execute(Backup.java:49)

      at com.iver.andami.plugins.ExtensionDecorator.execute(ExtensionDecorator.java:89)

      at com.iver.andami.ui.mdiFrame.MDIFrame.actionPerformed(MDIFrame.java:673)

      at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)

      at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)

      at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)

      at javax.swing.DefaultButtonModel.setPressed(Unknown Source)

      at javax.swing.AbstractButton.doClick(Unknown Source)

      at javax.swing.plaf.basic.BasicMenuItemUI.doClick(Unknown Source)

      at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(Unknown Source)

      at java.awt.AWTEventMulticaster.mouseReleased(Unknown Source)

      at java.awt.Component.processMouseEvent(Unknown Source)

      at javax.swing.JComponent.processMouseEvent(Unknown Source)

      at java.awt.Component.processEvent(Unknown Source)

      at java.awt.Container.processEvent(Unknown Source)

      at java.awt.Component.dispatchEventImpl(Unknown Source)

      at java.awt.Container.dispatchEventImpl(Unknown Source)

      at java.awt.Component.dispatchEvent(Unknown Source)

      at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)

      at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)

      at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)

      at java.awt.Container.dispatchEventImpl(Unknown Source)

      at java.awt.Component.dispatchEvent(Unknown Source)

      at java.awt.EventQueue.dispatchEvent(Unknown Source)

      at com.iver.andami.ui.AndamiEventQueue.dispatchEvent(AndamiEventQueue.java:58)

      at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)

      at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)

      at java.awt.EventDispatchThread.pumpEvents(Unknown Source)

      at java.awt.EventDispatchThread.pumpEvents(Unknown Source)

      at java.awt.EventDispatchThread.run(Unknown Source)

 

 

Según lo que he podido leer por Internet, es el típico error "java.lang.LinkageError" que se produce al existir dos versiones de archivos .class, ya que ahora existen dos ficheros fmap.jar. 

 

- He probado a desactivar la opción Build automatically de eclipse, hacer un "clean all" de todos los proyectos y recompilar usando los tasks "Build All" de los proyectos binaries y appgvSIG (y de esta forma generar otra vez fmap.jar) pero sigo obteniendo los mismos 2 errores. 

 

- Mi proyecto tiene añadido en la pestaña "Projects" de su "Java Build Path" el proyecto libFMap (que es donde se encuentra la clase XMLException).

 

- He descomprimido el fichero fmap.jar que hay en la ruta "_fwAndami\gvSIG\extensiones\com.iver.cit.gvsig\lib" y sí que contiene XMLException.class, así que no entiendo como es posible que no encuentre la clase. 

 

Agradecería que me dierais alguna idea porque ya no se qué más probar.

Muchas gracias!

 

Daniel González Moratona

dani.gonzalez en geodata.es

________________________________

Geodata Sistemas, S.L.

Tecnologies de la informació geogràfica

Bac de Roda 136 1er 1a

08020 Barcelona

tel. 93 3035367 

http://www.geodata.es <http://www.geodata.es/> 

 

 

------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: http://listserv.gva.es/pipermail/gvsig_desarrolladores/attachments/20100419/a0ce805f/attachment.htm 


Más información sobre la lista de distribución gvSIG_desarrolladores