Éste es un borrador sintetizando las investigaciones para pegar una aplicación sobre un proyecto base de maven, de modo a poder utilizarlo para probar distintas versiones de librerías sin perder tiempo resolviendo dependencias, etc.

  1. Si estamos en linux podemos instalar Maven con un simple apt-get install maven
    en /etc/maven está el settings.xml, donde, según las instrucciones de jboss, lo configuramos para que tenga acceso a sus repositorios

    <!-- el perfil de jboss -->
    <profile>
    <id>jboss-public-repository</id>
    <repositories>
    <repository>
    <id>jboss-public-repository-group</id>
    <name>JBoss Public Maven Repository Group</name>
    <url>https://repository.jboss.org/nexus/content/groups/public-jboss/</url>
    <layout>default</layout>
    <releases>
    <enabled>true</enabled>
    <updatePolicy>never</updatePolicy>
    </releases>
    <snapshots>
    <enabled>true</enabled>
    <updatePolicy>never</updatePolicy>
    </snapshots>
    </repository>
    </repositories>
    <pluginRepositories>
    <pluginRepository>
    <id>jboss-public-repository-group</id>
    <name>JBoss Public Maven Repository Group</name>
    <url>https://repository.jboss.org/nexus/content/groups/public-jboss/</url>
    <layout>default</layout>
    <releases>
    <enabled>true</enabled>
    <updatePolicy>never</updatePolicy>
    </releases>
    <snapshots>
    <enabled>true</enabled>
    <updatePolicy>never</updatePolicy>
    </snapshots>
    </pluginRepository>
    </pluginRepositories>
    </profile>
    
    <!-- el cual en seguida activamos -->
    <activeProfiles>
    <activeProfile>jboss-public-repository</activeProfile>
    </activeProfiles>
    
  2. Llegados a este punto, y luego de hacer varios intentos de crear un proyecto en base a un artifact, es que se hizo necesario aprender un poco más de maven para comprender lo que estamos haciendo.
    En efecto, Maven permite crear proyectos a partir de lo que llama archetypes, que son proyectos base que uno puede descargar, por ejemplo desde el catálogo de JBoss >>. Otra cosa distinta son los artifacts, que son aplicaciones o librerías desarrolladas por alguna organización y a las que se puede hacer referencia desde uno de nuestros proyectos. Los artifacts de JBoss son manejados por nexus, una herramienta de búsqueda y navegación de éstos >>.  (Existen otros repositorios con versiones deprecadas, etc >>)
  3. En esto último la cosas es confusa: ¿por qué el proyecto de base seam-booking,  sobre el cual construimos la aplicación, existe como artifact y no como archetype, que supuestamente debiera ser su función?
  4. Además, en la documentación de Seam se habla de un BOM (Bill of Materials), una especia de pom que se puede utilizar para importar todas las dependencias que el framework requiere. Entonces, al importar seam-booking, ¿incluye éste las dependencias de Seam o hay que declararlo aparte?
  5. Ok, basándonos en la documentación de los artifacts, hagamos la prueba de declarar la dependencia a seam-booking:
    • a.- Crear un proyecto base (un pom.xml) con eclipse (o con mvn)
    • b.- Declararle dependencia a booking, a ver si lo baja
    • c.- Poder abrirlo con eclipse (mvn eclipse…)
    • a.- Instalamos m2e (maven to eclipse, no hay mucha documentación, ver vídeo) desde el marketplace, y, en base a lo expuesto, se entiende que con  New Maven Projectno estamos importando un proyecto desde el repositorio – como creía – sino creando uno con nuestros propios parámetros… de hecho podemos saltarnos la parte de los archetypes si pretendemos importar todo un proyecto como dependencia.Luego, el pom.xml así creado viene con errores, dice que le faltan dependencias:
      Failure to transfer org.codehaus.plexus:plexus-utils:jar:2.0.5 from http://repo1.maven.org/maven2 was cached in the local repository, resolution will not be reattempted until the update
      interval of central has elapsed or updates are forced. Original error: Could not transfer artifact org.codehaus.plexus:plexus-utils:jar:2.0.5 from/to central (http://repo1.maven.org/
      maven2): The operation was cancelled.

      Al parecer le faltaban cosas por bajar pues al ejecurar mvn cleanen el directorio se pone a hacer downloads (la documentación advierte que puede necesitarse ejectuar varias veces por timeout, al parecer es eso)Se arregla pero cambia el error:
      Plugin execution not covered by lifecycle configuration: org.apache.maven.plugins:maven-compiler-plugin:2.3.2:testCompile (execution: default-testCompile, phase: test-compile)
      En las configuraciones de Maven en eclipse podemos ver que estamos usando una instalación embedded de m2e, la cual probablemente no toma las configuraciones que llevamos hasta acá. Podemos decirle que use el externo en /usr/share/mavenCon ésto ya sólo nos queda actualizar el proyecto
      Project configuration is not up-to-date with pom.xml. Run project configuration update
      En éste quick fix explican cómo, y queda sin errores…
    • b.- Así es que declaremos la dependencia según aparece en nexus:
      <dependency>
      <groupId>org.jboss.seam.examples-ee6.booking</groupId>
      <artifactId>booking-ejb</artifactId>
      <version>2.3.0-SNAPSHOT</version>
      </dependency>
      

      lo que da
      ArtifactDescriptorException: Failed to read artifact descriptor for org.jboss.seam.examples:booking:pom:2.3.0-SNAPSHOT: UnresolvableModelException: Could not find artifact org.jboss.seam:examples:pom:2.3.0-SNAPSHOT pom.xml /prueba-booking line 1 Maven Dependency Problem
      Pero si agregamos dependencias por m2e, sí podemos buscar, lo que significa que sí estamos conectados con el repositorio de JBoss (quizás nexus es el que no está al día…). De hecho está:

      <dependency>
      <groupId>org.jboss.seam.examples</groupId>
      <artifactId>seam-booking</artifactId>
      <version>3.1.0.Final</version>
      <type>war</type>
      </dependency>
      

      Ésto compila, y de hecho debe corresponder con Seam 3.1 que es el que queremos probar… pero el proyecto sigue tal cual y nada se ha descargado.

  6. Esto podría ser un problema, podría significar que no porque declaremos un proyecto como dependencia lo vamos a bajar y podremos construir sobre él (para eso están los arquetipos), sino que sólo estamos diciendo que este proyecto necesita del otro para funcionar y que los considere adyacentes – aunque el scope por defecto es compile, así es que no podríamos decir que es que ambos proyectos vayan a empaquetarse juntos solamente.
  7. Otras consideraciones:
    • Existe m2e-subclipse… pero el repositorio de artifacts no funciona como repositorio svn (comprobado)
    • Hay un plugin eclipse de maven (no confundir con m2e que es un plugin de maven para eclipse, los plugins son las distintas funcionalidades de maven: i.e. clean es un plugin, package es un plugin…). Teoría: el plugin crea un archivo de proyecto de eclipse a partir de un proyecto maven para poder abrirlo con este IDE. Esto se haría con mvn eclipse.
    • Ver ésto, que podría servir para, seteando propiedades en la aplicación, pasar parámetros a la compilación o ejecución, como un java -D
Este sitio utiliza cookies.    Leer más
Privacidad