[Gvsig_desarrolladores] Dependencia geoapi no encontrada

Fernando González fergonco en gmail.com
Jue Abr 14 15:36:50 CEST 2011


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?

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.

Un saludo y gracias de nuevo.



[1]
<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>
</dependency>
<dependency>
	<groupId>org.gvsig</groupId>
	<artifactId>org.gvsig.symbology.lib.impl</artifactId>
	<scope>runtime</scope>
</dependency>




2011/4/12 Cèsar Ordiñana <cordinyana en gvsig.com>:
> Hola,
>
> El 12/04/11 16:50, Fernando González escribió:
>> Bueno, pues ya tengo lo que quería. El código[1] lee un DXF itera por
>> todos los vértices de todas las geometrías y construye un gran
>> multipunto con todos ellos, que era lo que quería. Seguro que no es la
>> manera más ortodoxa (tengo un warning por deprecated) pero funciona,
>> vaya. El código lo meto en un proyecto maven al que modifico el pom
>> para que se parezca a esto[2].
>>
>> Quiero aprovechar para reconocer el gran trabajo que hay en el tema de
>> organizar el build. Poner orden ahí ha tenido que ser brutal.
>
> Gracias Fernando, la verdad es que si, ha sido un esfuerzo ingente el
> que se ha hecho, pero creo que ha valido la pena.
>
>> Me
>> cuesta entender el hecho de que tenga que incluir
>> org.gvsig:org.gvsig.symbology:impl y org.gvsig:org.gvsig.symbology. Si
>> no he entendido mal, este último es la API mientras que el primero es
>> la implementación de dicha API. ¿No debería incluirse la dependencia
>> de forma transitiva? Es posible que me esté confundiendo con el tema
>> de los clasificadores, que no he utilizado nunca, pero si la
>> implementación fuera un proyecto que dependiera de la API, sólo sería
>> necesario incluir las distintas implementaciones (las APIs se
>> incluirían de forma transitiva), ¿no?
>
> Si, con un proyecto con estructura maven como toca si. El problema es
> que tenemos proyectos con la estructura antigua aún, con el código del
> API e implementación juntos, que simplemente se separan al generar jars.
> Con esto no hay dependencia entre ellos, y sólo se distinguen mediante
> classifiers.
>
> Precisamente ese proyecto ha sido adaptado a una estructura multimódulo
> de maven [1], por lo que puedes empezar a usar las nuevas dependencias
> (org.gvsig.symbology.lib.api, org.gvsig.symbology.lib.impl, etc.). En
> este caso si que tendrás la dependencia transitiva entre impl y api.
>
> De todas formas, es una buena práctica en maven indicar todas las
> dependencias de compilación que tenga un proyecto, aunque algunas las
> puedas tener de forma transitiva. Ej: proyecto A depende para compilar
> de proyecto B y de C, mientras que B depende para compilar de C. Con
> esto, bastaría con incluir en A la dependencia con B, pero si más
> adelante B quita su dependencia con C, A ya no compilaría.
>
> Otra buena práctica también consiste en no poner como dependencias de
> compilación (valor por defecto) aquellas que sólo se necesiten en
> ejecución o test, mediante el uso el tag <scope>runtime/test</scope>.
> Esto también te obligaría a poner las dependencias de compilación con el
> API, aunque tengas la dependencia con la implementación para ejecución o
> test.
>
>> No sé si me estoy rallando (si es así decírmelo sin problemas), pero
>> supongo que el objetivo de tener API e implementaciones por separado
>> es que se pueda cambiar de implementación fácilmente. Me parece muy
>> interesante, pero para que esto sea fácil de usar se podrían poner
>> algunos poms de ejemplos con las combinaciones de implementaciones más
>> fácilmente utilizadas. Mientras escribo, se me ocurre que esto tiene
>> que ver con el tema del org.gvsig.core.maven.dependencies que
>> comentaba César, pero que yo no he entendido muy bien. Más adelante le
>> echaré un vistazo a eso a ver.
>
> Si, justo el org.gvsig.core.maven.dependencies es para eso que comentas.
> Si te animas a mirarlo y te surge alguna duda coméntalo a ver si te
> puedo echar una mano. Mi propuesta aplicando eso y mis comentarios
> anteriores a tu pom sería:
>
> <project xmlns="http://maven.apache.org/POM/4.0.0"
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
> http://maven.apache.org/xsd/maven-4.0.0.xsd">
> <modelVersion>4.0.0</modelVersion>
>
> <groupId>org.test</groupId>
> <artifactId>dxftest</artifactId>
> <version>1.0-SNAPSHOT</version>
> <packaging>jar</packaging>
>
> <name>dxftest</name>
> <url>http://maven.apache.org</url>
>
> <properties>
> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
> </properties>
> <repositories>
> <repository>
> <id>gvsig</id>
> <name>Repositorio gvSIG</name>
> <url>
>
> http://gvsig-desktop.forge.osor.eu/downloads/pub/projects/gvSIG-desktop/maven-repository/
> </url>
> </repository>
> <repository>
> <id>osgeo</id>
> <name>Open Source Geospatial Foundation</name>
> <url>http://download2.osgeo.org/webdav/geotools</url>
> <releases>
> <enabled>true</enabled>
> <updatePolicy>never</updatePolicy>
> <checksumPolicy>warn</checksumPolicy>
> </releases>
> <snapshots>
> <enabled>false</enabled>
> </snapshots>
> </repository>
> </repositories>
>
> <dependencyManagement>
> <!-- Con esto ya no hace falta especificar las versiones de dependencias
> gvSIG -->
> <dependencies>
> <dependency>
> <groupId>org.gvsig</groupId>
> <artifactId>org.gvsig.core.maven.dependencies</artifactId>
> <version>2.0.1-SNAPSHOT</version>
> <type>pom</type>
> <scope>import</scope>
> </dependency>
> </dependencies>
> </dependencyManagement>
>
> <dependencies>
> <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>
> </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>
> <!-- Dejamos arriba sólo dependencias de compilación, añadiendo esta de
> ejecución
>                 que nos incluirá a su vez todas las dependencias
> (impls, spis, proveedores, etc.)
>                 necesarias en ejecución. -->
> <dependency>
> <groupId>org.gvsig</groupId>
> <artifactId>org.gvsig.core.maven.dependencies</artifactId>
> <version>2.0.1-SNAPSHOT</version>
> <type>pom</type>
> <scope>runtime</scope>
> </dependency>
> </dependencies>
> <build>
> <plugins>
> <plugin>
> <groupId>org.apache.maven.plugins</groupId>
> <artifactId>maven-eclipse-plugin</artifactId>
> <configuration>
> <downloadSources>true</downloadSources>
> <downloadJavadocs>true</downloadJavadocs>
> </configuration>
> </plugin>
> <plugin>
> <groupId>org.apache.maven.plugins</groupId>
> <artifactId>maven-compiler-plugin</artifactId>
> <configuration>
> <source>1.5</source>
> <target>1.5</target>
> </configuration>
> </plugin>
> </plugins>
> </build>
> </project>
>
>> Bueno, gracias por la ayuda y por el trabajo. Un saludo.
>
> Gracias a ti por los comentarios Fernando, nos viene de perlas que se
> vayan probando estas cosas para ir puliendo el sistema. Aunque queda un
> poco largo el email, aprovecho para proponerte otra implementación
> alternativa del ejemplo que adjuntas, pero empleando Visitor con lo que
> se simplifica un poco:
>
>     public static void main(String[] args) throws Exception {
>         new DefaultLibrariesInitializer().fullInitialize();
>         DataManager manager = DALLocator.getDataManager();
>         DXFStoreParameters params =
>             (DXFStoreParameters) manager
>                 .createStoreParameters(DXFStoreProvider.NAME);
>         params
>             .setFile("/home/fergonco/b/projects/geoweb/dxf/ejemplo7.dxf");
>         params.setCRS("EPSG:23030");
>
>         FeatureStore store =
>             (FeatureStore) manager.openStore(DXFStoreProvider.NAME,
> params);
>
>         GeometryFactory jtsGeometryFactory = new GeometryFactory();
>         final HashSet<Coordinate> points = new HashSet<Coordinate>();
>         store.accept(new Visitor() {
>             public void visit(Object obj) throws
> VisitCanceledException, BaseException {
>                 Feature feature = (Feature) obj;
>                 Geometry geom = feature.getDefaultGeometry();
>                 PathIterator gp = geom.getPathIterator(null);
>                 double[] coords = new double[6];
>                 while (!gp.isDone()) {
>                     gp.currentSegment(coords);
>                     points.add(new Coordinate(coords[0], coords[1]));
>                     gp.next();
>                 }
>             }
>         });
>
>         System.out.println(jtsGeometryFactory.createMultiPoint(points
>             .toArray(new Coordinate[0])));
>         store.dispose();
>     }
>
> [1]
> https://svn.forge.osor.eu/svn/gvsig-desktop/branches/v2_0_0_prep/libraries/org.gvsig.symbology
>
> Saludos,
>
> --
> Cèsar Ordiñana Navarro
> gvSIG software architect
> DiSiD Technologies (http://www.disid.com)
>
>
>
>> [1]
>>       public static void main(String[] args) throws Exception {
>>               new DefaultLibrariesInitializer().fullInitialize();
>>               DataManager manager = DALLocator.getDataManager();
>>               DXFStoreParameters params = (DXFStoreParameters) manager
>>                               .createStoreParameters(DXFStoreProvider.NAME);
>>               params.setFile("/home/fergonco/b/projects/geoweb/dxf/ejemplo7.dxf");
>>               params.setCRS("EPSG:23030");
>>
>>               FeatureStore store = (FeatureStore) manager.createStore(params);
>>               FeatureSet features = store.getFeatureSet();
>>
>>               DisposableIterator it = features.iterator();
>>               GeometryFactory jtsGeometryFactory = new GeometryFactory();
>>               HashSet<Coordinate>  points = new HashSet<Coordinate>();
>>               while (it.hasNext()) {
>>                       Feature feature = (Feature) it.next();
>>                       Geometry geom = feature.getDefaultGeometry();
>>                       PathIterator gp = geom.getPathIterator(null);
>>                       double[] coords = new double[6];
>>                       while (!gp.isDone()) {
>>                               gp.currentSegment(coords);
>>                               points.add(new Coordinate(coords[0], coords[1]));
>>                               gp.next();
>>                       }
>>               }
>>               System.out.println(jtsGeometryFactory.createMultiPoint(points
>>                               .toArray(new Coordinate[0])));
>>               it.dispose();
>>               features.dispose();
>>               store.dispose();
>>       }
>>
>> [2]
>>
>> <project xmlns="http://maven.apache.org/POM/4.0.0"
>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>       xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
>> http://maven.apache.org/xsd/maven-4.0.0.xsd">
>>       <modelVersion>4.0.0</modelVersion>
>>
>>       <groupId>org.test</groupId>
>>       <artifactId>dxftest</artifactId>
>>       <version>1.0-SNAPSHOT</version>
>>       <packaging>jar</packaging>
>>
>>       <name>dxftest</name>
>>       <url>http://maven.apache.org</url>
>>
>>       <properties>
>>               <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
>>       </properties>
>>       <repositories>
>>               <repository>
>>                       <id>gvsig</id>
>>                       <name>Repositorio gvSIG</name>
>>                       <url>
>>                               http://gvsig-desktop.forge.osor.eu/downloads/pub/projects/gvSIG-desktop/maven-repository/
>>                       </url>
>>               </repository>
>>               <repository>
>>                       <id>osgeo</id>
>>                       <name>Open Source Geospatial Foundation</name>
>>                       <url>http://download2.osgeo.org/webdav/geotools</url>
>>                       <releases>
>>                               <enabled>true</enabled>
>>                               <updatePolicy>never</updatePolicy>
>>                               <checksumPolicy>warn</checksumPolicy>
>>                       </releases>
>>                       <snapshots>
>>                               <enabled>false</enabled>
>>                       </snapshots>
>>               </repository>
>>       </repositories>
>>
>>       <dependencies>
>>               <dependency>
>>                       <groupId>junit</groupId>
>>                       <artifactId>junit</artifactId>
>>                       <version>3.8.1</version>
>>                       <scope>test</scope>
>>               </dependency>
>>               <dependency>
>>                       <groupId>org.gvsig</groupId>
>>                       <artifactId>org.gvsig.compat</artifactId>
>>                       <classifier>se</classifier>
>>                       <version>2.0-SNAPSHOT</version>
>>               </dependency>
>>               <dependency>
>>                       <groupId>org.gvsig</groupId>
>>                       <artifactId>org.gvsig.symbology</artifactId>
>>                       <classifier>impl</classifier>
>>                       <version>2.0-SNAPSHOT</version>
>>               </dependency>
>>               <dependency>
>>                       <groupId>org.gvsig</groupId>
>>                       <artifactId>org.gvsig.symbology</artifactId>
>>                       <version>2.0-SNAPSHOT</version>
>>               </dependency>
>>               <dependency>
>>                       <groupId>org.gvsig</groupId>
>>                       <artifactId>org.gvsig.fmap.dal.file</artifactId>
>>                       <classifier>store.dxf</classifier>
>>                       <version>2.0-SNAPSHOT</version>
>>               </dependency>
>>               <dependency>
>>                       <groupId>org.gvsig</groupId>
>>                       <artifactId>org.gvsig.fmap.dal.file</artifactId>
>>                       <version>2.0-SNAPSHOT</version>
>>               </dependency>
>>               <dependency>
>>                       <groupId>org.gvsig</groupId>
>>                       <artifactId>org.gvsig.fmap.geometry</artifactId>
>>                       <classifier>impl</classifier>
>>                       <version>2.0-SNAPSHOT</version>
>>               </dependency>
>>               <dependency>
>>                       <groupId>org.gvsig</groupId>
>>                       <artifactId>org.gvsig.projection</artifactId>
>>                       <classifier>cresques-impl</classifier>
>>                       <version>2.0-SNAPSHOT</version>
>>               </dependency>
>>       </dependencies>
>>       <build>
>>               <plugins>
>>                       <plugin>
>>                               <groupId>org.apache.maven.plugins</groupId>
>>                               <artifactId>maven-eclipse-plugin</artifactId>
>>                               <configuration>
>>                                       <downloadSources>true</downloadSources>
>>                                       <downloadJavadocs>true</downloadJavadocs>
>>                               </configuration>
>>                       </plugin>
>>               </plugins>
>>       </build>
>> </project>
> _______________________________________________
> gvSIG_desarrolladores mailing list
> gvSIG_desarrolladores en listserv.gva.es
> http://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores
>


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