Herramientas Personales
gvSIG Desktop
gvSIG Desktop

Cached time 11/21/13 20:18:30 Clear cache and reload

 
Acciones de Documento

Configuración inicial de maven

por Cèsar OrdiñanaÚltima modificación 11/04/2013 11:02

Configuración de maven

Para empezar a trabajar con maven en gvSIG, no necesitamos realizar ninguna configuración especial, aparte de tener un JDK instalado, ya que gvSIG contiene un proyecto build con todo lo necesario, incluyendo una instalación de maven.

Si, de todas formas, queremos instalar nosotros maven en nuestro sistema, podemos descargarlo de la web del proyecto e instalándolo siguiendo las instrucciones de instalación. Hay que tener en cuenta que la versión mínima de maven que requiere el proyecto es la 2.2.1.

También podemos necesitar configurar maven si accedemos a Internet a través de un proxy HTTP, cuya configuración se indica en la página de instalación de maven.

Si usamos la instalación de maven incluida en el proyecto build, podemos encontrarlo en la subcarpeta maven.

Note

las pruebas de maven en gvSIG se hacen con la versión incluida en el proyecto build, por lo que con otra versión la construcción del proyecto puede que no funcione correctamente.

Tanto si lo instalamos nosotros, como si vamos a usar la instalación del proyecto build, en el subdirectorio bin tenemos el script mvn, que podemos usar si estamos en linux, mac o cualquier otro unix, y el archivo mvn.bat si estamos en windows. Lo más cómodo, para poder usarlo desde consola, es añadirlo al path de ejecución (generalmente añadir el directorio build/maven/bin la variable PATH) y así podremos usarlo desde cualquier lugar.

Más adelante se explicarán algunos objetivos habituales que podremos usar, bien desde una consola, bien desde el propio eclipse mediante el uso de launchers desde el menu de Herramientas externas.

Configuración de la plataforma

gvSIG emplea diversas librerías nativas, que son necesarias tanto en compilación como en ejecución de la aplicación. Al ser nativas, deberemos emplear las que correspondan con nuestra plataforma a la hora de compilar gvSIG.

Para ello deberemos realizar una pequeña configuración que indique a maven los detalles de nuestra plataforma, y así éste pueda cargar las librerías nativas que correspondan. Para ello, en el directorio home de nuestro usuario, crearemos un archivo .gvsig.platform.properties con el siguiente contenido:

native_platform=linux
native_distribution=all
native_compiler=gcc4
native_arch=i386
native_libraryType=dynamic
export native_classifier=${native_platform}-${native_distribution}-${native_compiler}-${native_arch}-${native_libraryType}

Los valores imprescindibles son los 5 primeros, cuyo significado se explica en el apartado de compilación de librerías nativas

Los valores soportados actualmente, es decir, para los que las librerías nativas están ya compiladas o disponibles, son los siguientes:

platform distribution compiler arch libraryType Comentarios
linux all gcc4 i386 dynamic Versión de 32 bits (equivalente en general a una Ubuntu-10.04)
win nt vs8 i386 dynamic Versión de 32 bits, compatible con windows XP, Vista y 7.
mac 10.5 gcc4 universal dynamic Plataforma todavía no disponible. Está en proceso de preparación y pueden variar alguno de los parámetros de la plataforma.

Esta configuración directamente nos permite trabajar con la configuración del proyecto preparada para integrar maven con eclipse en gvSIG. Si vamos a invocar a maven desde linea de órdenes, deberemos hacer llegar estos parámetros a maven de otra forma. Existen dos opciones:

  • Incluir el valor de las variables native-classifier y native-platform en cada invocación a maven. Ej:

    mvn -Dnative-classifier=linux-all-gcc4-i386-dynamic -Dnative-platform=linux install
    
  • Definir una variable de entorno MAVEN_OPTS incluyendo la variable native_classifier. En linux, por ejemplo, bastaría con incluir lo siguiente en el archivo .bash_rc:

    if [ -f "${HOME}/.gvsig.platform.properties" ] ; then
      . ${HOME}/.gvsig.platform.properties
      export MAVEN_OPTS="-Xmx256M -XX:MaxPermSize=64m -Dnative-classifier=${native_classifier} -Dnative-platform=${native_platform}"
    else
      export MAVEN_OPTS="-Xmx256M -XX:MaxPermSize=64m"
    fi
    

    Con esto podemos compartir directamente los valores configurados de la plataforma entre maven desde eclipse y maven desde consola. Desde cualquier otro sistema operativo podemos dar valor directamente al native_classifier en la definición de la variable de entorno, aunque tendremos que acordarnos, si cambiamos algún valor de la plataforma, de cambiarlo para ambos casos (desde eclipse y desde consola).

Además de las plataformas para las que están disponibles librerías nativas ya compiladas, un desarrollador puede compilarlas para una nueva plataforma siguiendo los pasos indicados en el documento de compilación de librerías nativas, además de configurar como toca los parámetros del archivo .gvsig.platform.properties o la variable de entorno correspondiente.

Acceso de escritura al repositorio maven de gvSIG

Si somos los responsables de publicar binarios y fuentes o documentación sobre un proyecto de gvSIG, necesitaremos configurar maven para poder tener acceso de escritura al servidor donde se aloja el repositorio de maven de gvSIG, a través de WEBDAV y HTTPS.

Dado que el servidor de gvSIG emplea un certificado digital autofirmado, deberemos instalar antes que nada el certificado de la CA de gvsig en el repositorio de certificados de Java. Los pasos son los siguientes:

  1. Descargar el archivo InstallCert.java [1] y compilarlo con la orden:

    javac InstallCert.java
    
    [1]

    Este archivo y la información de uso han sido obtenidos desde http://stufftohelpyouout.blogspot.com/2008/10/unable-to-find-valid-certification-path.html y http://nodsw.com/blog/leeland/2006/12/06-no-more-unable-find-valid-certification-path-requested-target. Se le ha realizado una pequeña modificación para que por defecto guarde sobre el almacen de certificados principal de la instalación de java, ahorrando así los pasos de exportar y volver a importar el certificado.

  2. A continuación desde consola, lanzar la siguiente orden:

    sudo java InstallCert devel.gvsig.org
    
    Loading KeyStore /usr/lib/jvm/java-6-sun-1.6.0.26/jre/lib/security/cacerts...
    Opening connection to devel.gvsig.org:443...
    Starting SSL handshake...
    
    javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: 
    PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: 
    unable to find valid certification path to requested target
            at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:174)
            at com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1649)
    ...
    
    Server sent 1 certificate(s):
    
     1 Subject CN=devel.gvsig.org
       Issuer  CN=devel.gvsig.org
       sha1    9a 47 0f 0b 1e 41 a9 43 d0 22 0f f2 d3 fd a1 31 5a a8 21 f3 
       md5     1c d5 19 ea 61 df 5b a4 bf 62 2a 90 09 9d 11 cc 
    
    Enter certificate to add to trusted keystore or 'q' to quit: [1]
    

    En Windows usaremos el siguiente comando:

    C:\Users\user1\Downloads>%JAVA_HOME%\bin\javac InstallCert.java
    
    C:\Users\user1\Downloads>java InstallCert devel.gvsig.org
    Loading KeyStore C:\prog32\jdk6u29\jre\lib\security\cacerts...
    Opening connection to devel.gvsig.org:443...
    Starting SSL handshake...
    
    javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed:
    sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
            at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:174)
            at com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1731)
            at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:241)
            at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:235)
            at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1206)
            at com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:136)
            at com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Handshaker.java:593)
            at com.sun.net.ssl.internal.ssl.Handshaker.process_record(Handshaker.java:529)
            at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:925)
            at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1170)
            at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1197)
            at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1181)
            at InstallCert.main(InstallCert.java:129)
    Caused by: sun.security.validator.ValidatorException: PKIX path building failed: 
    sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
            at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:323)
            at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:217)
            at sun.security.validator.Validator.validate(Validator.java:218)
            at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:126)
            at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:209)
            at InstallCert$SavingTrustManager.checkServerTrusted(InstallCert.java:226)
            at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1198)
            ... 8 more
    Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to 
    requested target
            at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:174)
            at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:238)
            at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:318)
            ... 14 more
    
    Server sent 1 certificate(s):
    
     1 Subject EMAILADDRESS=admin@gvsig.org, CN=devel.gvsig.org, OU=gvSIG project, O=gvSIG Association, L=Valencia,
     ST=Valencia, C=ES
       Issuer  EMAILADDRESS=admin@gvsig.org, CN=devel.gvsig.org, OU=gvSIG project, O=gvSIG Association, L=Valencia, 
       ST=Valencia, C=ES
       sha1    73 30 d6 30 6e fb 30 60 09 ac 94 85 36 f9 27 81 e3 f3 c2 fd
       md5     59 65 bd 67 2d 59 22 df 8d 8e 0d a6 5e f1 54 2b
    
    Enter certificate to add to trusted keystore or 'q' to quit: [1]
    
    
    [
    [
      Version: V3
      Subject: EMAILADDRESS=admin@gvsig.org, CN=devel.gvsig.org, OU=gvSIG project, O=gvSIG Association, L=Valencia,
      ST=Valencia, C=ES
      Signature Algorithm: SHA1withRSA, OID = 1.2.840.113549.1.1.5
    
      Key:  Sun RSA public key, 1024 bits
      modulus: 13202240990123857828105832548656908338776238493112050183965274188026349141580065751167773737451990045
      10852417463251480195349655822167474112
    949140626085069137900739105075962467764174959683911146999883749549039102537440964126002195693809409095128024
    250898549304085601766846547755883368884816
    20155015717285669413
      public exponent: 65537
      Validity: [From: Tue Dec 20 13:07:17 CET 2011,
                   To: Fri Dec 17 13:07:17 CET 2021]
      Issuer: EMAILADDRESS=admin@gvsig.org, CN=devel.gvsig.org, OU=gvSIG project, O=gvSIG Association, L=Valencia, 
      ST=Valencia, C=ES
      SerialNumber: [    ea50768a af083070]
    
    Certificate Extensions: 3
    [1]: ObjectId: 2.5.29.14 Criticality=false
    SubjectKeyIdentifier [
    KeyIdentifier [
    0000: E9 74 E5 C6 4E B2 5E C0   7D 2A 20 CB 29 06 E6 87  .t..N.^..* .)...
    0010: 9C 1A D1 86                                        ....
    ]
    ]
    
    [2]: ObjectId: 2.5.29.35 Criticality=false
    AuthorityKeyIdentifier [
    KeyIdentifier [
    0000: E9 74 E5 C6 4E B2 5E C0   7D 2A 20 CB 29 06 E6 87  .t..N.^..* .)...
    0010: 9C 1A D1 86                                        ....
    ]
    
    [EMAILADDRESS=admin@gvsig.org, CN=devel.gvsig.org, OU=gvSIG project, O=gvSIG Association, L=Valencia, ST=Valencia, C=ES]
    SerialNumber: [    ea50768a af083070]
    ]
    
    [3]: ObjectId: 2.5.29.19 Criticality=false
    BasicConstraints:[
      CA:true
      PathLen:2147483647
    ]
    
    ]
      Algorithm: [SHA1withRSA]
      Signature:
    0000: 1B 70 8D 8A F4 A3 87 8E   27 AC 40 41 68 42 DF 67  .p......'.@AhB.g
    0010: 49 7D D7 55 BE FF E4 21   7A A3 69 76 B1 6E 23 52  I..U...!z.iv.n#R
    0020: 54 4D FE 0B 71 4B E8 28   9B 53 C5 D1 A2 90 BB E2  TM..qK.(.S......
    0030: 19 B3 26 E6 36 67 06 7C   2A EE 14 2A E6 7E D6 AE  ..&.6g..*..*....
    0040: 8F E4 CB 42 43 3B CE 1A   93 03 3C C7 A4 65 A1 F6  ...BC;....<..e..
    0050: 6D BB 64 9F B1 71 B8 27   3E 60 0F 91 42 3A 26 00  m.d..q.'>`..B:&.
    0060: AB 82 38 60 DA FC C9 99   68 F3 BE CC A3 38 13 1F  ..8`....h....8..
    0070: 83 15 5E 4A 7D 59 76 E3   75 ED 47 20 2E 15 AB BA  ..^J.Yv.u.G ....
    
    ]
    
    Added certificate to keystore 'C:\prog32\jdk6u29\jre\lib\security\cacerts' using alias 'devel.gvsig.org-1'
    

    Indicaremos la opción 1, tras lo cuál se añadirá el certificado al keystore de la instalación de java que estamos usando, en concreto en el archivo $JAVA_HOME/jre/lib/security/cacerts.

    El ejemplo es sobre una instalación de Java sobre Ubuntu, dónde el archivo cacerts está ubicado en /usr/lib/jvm/java-6-sun/jre/lib/security. Hay que tener en cuenta que se importe sobre el repositorio de certificados de la instalación de Java que vayamos a usar para invocar a maven y eclipse.

    Además si usamos una instalación de java del sistema, requerirá que invoquemos la orden anterior con permisos de administrador. En el caso de Ubuntu, basta con incluir sudo delante de la llamada a java.

A continuación hay que configurar el archivo settings.xml de maven con los datos necesarios para acceder al repositorio de maven de gvSIG. Dicho archivo está ubicado en el directorio USER_HOME/.m2/, siendo USER_HOME el directorio home del usuario, que depende del sistema operativo en el que nos encontremos.

Si es la primera vez que usamos maven 2, deberemos crear a mano esta carpeta y el archivo settings.xml.

El archivo deberá tener una entrada para configurar el acceso al servidor de gvSIG, cuyo id es gvsig-repository. Como el acceso es por SSH, deberemos incluir el usuario y la clave:

<?xml version="1.0" encoding="UTF-8"?>

<settings 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/settings-1.0.0.xsd">

    <servers>
        <server>
            <id>gvsig-repository</id>
            <username>[USUARIO]</username>
            <password>[CLAVE]</password>
            <filePermissions>664</filePermissions>
            <directoryPermissions>774</directoryPermissions>
        </server>
    </servers>
</settings>

Note

Es importante incluir la configuración de permisos indicada en el ejemplo anterior, ya que los archivos se suben dejando como usuario y grupo el mismo que lo ha subido, lo que evitaría que otro usuario pudiera subir modificaciones sobre un mismo archivo.

Si no queremos incluir la clave de acceso de forma visible en el archivo anterior, a partir de las últimas versiones maven permite encriptar las claves. Para ello, seguiremos los pasos descritos en la documentación de maven, en la página Password Encryption

A modo de resumen, los pasos a seguir son:

  1. Creamos una clave maestra con la que encriptar las claves de los servidores, mediante la orden:

    mvn --encrypt-master-password <clave-maestra>
    

    Esto nos devolverá la clave encriptada, algo como:

    {jSMOWnoPFgsHVpMvz5VrIt5kRbzGpI8u+9EF1iFQyJQ=}
    
  2. Guardamos la clave maestra encriptada en el archivo [USER HOME]/.m2/settings-security.xml, que crearemos sino existe, con el siguiente contenido:

    <settingsSecurity>
      <master>[CLAVE MAESTRA ENCRIPTADA]</master>
    </settingsSecurity>
    

    Usando el ejemplo del paso anterior, quedaría algo como:

    <settingsSecurity>
      <master>{jSMOWnoPFgsHVpMvz5VrIt5kRbzGpI8u+9EF1iFQyJQ=}</master>
    </settingsSecurity>
    
  3. Encriptamos la clave de acceso al servidor de OSOR:

    mvn --encrypt-password <clave>
    

    Que nos devolverá algo como:

    {COQLCE6DU6GtcS5P=}
    
  4. Sustituimos la clave en abierto por la clave encriptada en el archivo [USER HOME]/.m2/settings.xml:

    <server>
      <id>gvsig-repository</id>
      <username>[USUARIO]</username>
      <password>[CLAVE ENCRIPTADA]</password>
    </server>
    

    Según el ejemplo del paso anterior, quedaría algo como:

    <server>
      <id>gvsig-repository</id>
      <username>USER</username>
      <password>{COQLCE6DU6GtcS5P=}</password>
    </server>
    

Hecho con Plone CMS, el Sistema de Gestión de Contenidos de Fuentes Abiertos

Este sitio cumple con los siguientes estándares: