[Gvsig_desarrolladores] Dependencia geoapi no encontrada

Cèsar Ordiñana cordinyana en gvsig.com
Lun Abr 18 12:44:26 CEST 2011


El 14/04/11 15:36, Fernando González escribió:
> César, gracias por los comentarios. También me funciona con tu sugerencia.
>
> Resumiendo, hay que depender de las APIs en tiempo de compilación y de
> las implementaciones en tiempo de ejecución (runtime) ¿no?

Si, eso es.

> Ahora tengo una pregunta para nota. Supongo que en el contexto de
> gvSIG no es un problema, pero en mi caso sí que puede serlo. Si tomo
> tu pom tal cual, las dependencias hacen 35M. He reemplazado la
> dependencia a org.gvsig:org.gvsig.core.maven.dependencies por
> dependencias individuales sólo a las implementaciones que necesito[1]
> y he podido reducirlo a 18M.
>
> Teniendo en cuenta que yo no voy a dibujar ni proyectar el DXF,
> ¿existe la posibilidad de reducir las dependencias necesarias? Intuyo
> que podría crearme yo mis implementaciones "vacías" de simbología y
> "proyecciones". Tiene pinta de que me vaya a conformar con aumentar 18
> Mb el tamaño de mi aplicación pero me interesa saber si es posible.

Si, se puede reducir quitando alguna dependencia. El problema con los 
proyectos con estructura vieja es que, aunque generan varios jars, el 
pom.xml es el mismo para todos y, por tanto, las dependencias.

Por ejemplo, en el caso del proyecto org.gvsig.fmap.dal.file 
(libFMap_dalfile) se generan varios jars, uno general más uno por cada 
proveedor (shp, dbf, dxf y dgn). Además, para dxf y dgn se generan un 
par de jars más que incluyen operaciones para cargar la leyenda.

En realidad sólo estos jars son los que dependen de 
org.gvsig.symbology.lib.api, pero como el pom.xml es el mismo para 
todos, el resto se la llevan detrás.

El día que convirtamos DAL en un proyecto multimódulo se solventará 
esto. Mientras, puedes aprovechar las opciones de maven que te permiten 
excluir dependencias transitivas (tag <exclusions>). Te pongo como 
quedaría la lista de dependencias en tu proyecto para que veas como 
sería. En concreto he excluido las dependencias con 
org.gvsig.fmap.mapcontext y org.gvsig.symbology.lib.api. Fíjate también 
en que hay que ponerlo, tanto en la dependencia con 
org.gvsig.fmap.dal.file como con org.gvsig.fmap.dal.file:store.dxf, ya 
que en realidad son el mismo pom:

<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.gvsig</groupId>
<artifactId>org.gvsig.tools.lib</artifactId>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.gvsig</groupId>
<artifactId>org.gvsig.metadata.lib.basic.api</artifactId>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.gvsig</groupId>
<artifactId>org.gvsig.fmap.dal</artifactId>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.gvsig</groupId>
<artifactId>org.gvsig.fmap.dal</artifactId>
<classifier>spi</classifier>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.gvsig</groupId>
<artifactId>org.gvsig.fmap.dal.file</artifactId>
<classifier>store.dxf</classifier>
<scope>compile</scope>
<exclusions>
<exclusion>
<groupId>org.gvsig</groupId>
<artifactId>org.gvsig.fmap.mapcontext</artifactId>
</exclusion>
<exclusion>
<groupId>org.gvsig</groupId>
<artifactId>org.gvsig.symbology.lib.api</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.gvsig</groupId>
<artifactId>org.gvsig.fmap.geometry</artifactId>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.gvsig</groupId>
<artifactId>org.gvsig.projection</artifactId>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.gvsig</groupId>
<artifactId>org.gvsig.compat</artifactId>
<classifier>se</classifier>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.gvsig</groupId>
<artifactId>org.gvsig.fmap.geometry</artifactId>
<classifier>impl</classifier>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.gvsig</groupId>
<artifactId>org.gvsig.projection</artifactId>
<classifier>cresques-impl</classifier>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.gvsig</groupId>
<artifactId>org.gvsig.fmap.dal.file</artifactId>
<scope>runtime</scope>
<exclusions>
<exclusion>
<groupId>org.gvsig</groupId>
<artifactId>org.gvsig.fmap.mapcontext</artifactId>
</exclusion>
<exclusion>
<groupId>org.gvsig</groupId>
<artifactId>org.gvsig.symbology.lib.api</artifactId>
</exclusion>
</exclusions>
</dependency>


Espero que con esto se te reduzcan un poco las dependencias. No se si se 
podría quitar algo más si existen más funcionalidades que no vayas a 
usar. Mediante la orden "mvn dependency:tree" puedes ver cuál es el 
árbol de dependencias de tu proyecto y seguir investigando a ver.

De proyecciones no creo que puedas huir porque se necesita para la 
generación de la proyección con la que se carga el DXF, aunque no uses 
reproyección. Lo que no se es si se podrá quitar alguna de sus dependencias.

Por cierto, supongo que junit lo habrás quitado también.

Saludos,

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



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