Weblogic 12.2.1. Instalación del plugin Maven (Windows)

Por Isaac Ruiz
Publicado en Junio 2016

Introducción.

Durante años, Apache Maven ha sido una de las herramientas para gestión del ciclo de vida de un proyecto de software en el mundo java. 

Desde la llegada de Maven el ciclo de vida de un componente de software en java comenzó a tener por fin un mecanismo que permitiera automatizarlo, esto facilitó mucho las tareas que, por lo repetitivas, a veces caían en estados de error, sin mencionar lo tedioso que se volvían.

La necesidad de tener un ecosistema de integración continua ha provocado que poco a poco surjan más herramientas que completen este tipo de necesidades. El interés que Oracle ha puesto sobre Hudson, el servidor de integración continua más popular, confirman el interés de la empresa por este tipo de herramientas.

​Hudson es un servidor de integración continua, es una pieza fundamental en el proceso de construcción de un ecosistema de integración continua.



Es dentro de este contexto que, junto a la llegada de la versión 12c., Weblogic Server proporciona un plugin para Apache Maven.
(Realmente el soporte para Maven viene desde la 11g, pero, es con la 12c que se tienen más funcionalidades y la integración está mejorada).

Este plugin tiene el principal objetivo de mantener sincronizado un repositorio local con los artefactos compatibles con el contenedor.

Adicionalmente, el plugin activa ciertos arquetipos que permiten la generación de proyectos Maven listos para ser utilizados.

Estos arquetipos a su vez permiten gestionar, desde el POM, usando la línea de comandos tareas comunes para administrar tanto el ciclo de despliegue del artefacto como del propio servidor.

El presente documento detalla los pasos necesarios para activar el plugin en Weblogic 12c, específicamente en la versión 12.2.1​.

Requerimientos.

Este documento asume que se tiene cierta experiencia usando la línea de comandos Windows, conocimiento básico con el uso de Maven y conocimiento básico en el uso de Weblogic Server 12c

También, se asume que se tiene instalada la versión 8.x del JDK proporcionado por Oracle (HotSpot), y la versión 3.3.9 de Apache Maven.

​Por último, se asume que se tiene instalado un dominio con WLS 12.2.1.​

Si aún no tienes instalado un dominio puedes leer alguno de estos documentos:

Validación de dominio.

La instalación del plugin está relacionada directamente a la versión de Weblogic que se tiene instalada.

Por lo general la carpeta raíz de una instalación WLS tiene estás carpetas.

Esta carpeta raíz es la que comúnmente conocemos como ORACLE_HOME.

ORACLE_HOME --> C:\Oracle\Middleware\Oracle_Home

 

Este dato será utilizado a lo largo de la instalación del plugin.
 
PS C:\Oracle\Middleware\Oracle_Home> ls

Directorio: C:\Oracle\Middleware\Oracle_Home

Mode      LastWriteTime             Length Name
----      -------------             -----  ----
d-----    24/04/2016  09:58 p. m.          .patch_storage
d-----    24/04/2016  09:56 p. m.          cfgtoollogs
d-----    24/04/2016  09:51 p. m.          coherence
d-----    24/04/2016  09:53 p. m.          em
d-----    24/04/2016  09:55 p. m.          install
d-----    24/04/2016  09:56 p. m.          inventory
d-----    24/04/2016  09:53 p. m.          OPatch
d-----    24/04/2016  09:53 p. m.          oracle_common
d-----    24/04/2016  09:55 p. m.          oui
d-----    24/04/2016  10:09 p. m.          user_projects
d-----    24/04/2016  09:53 p. m.          wlserver
-a----    24/04/2016  10:09 p. m.   225    domain-registry.xml​

Para nuestro ejercicio la variable ORACLE_HOME apunta a la carpeta:
 
C:\Oracle\Middleware\Oracle_Home


La carpeta ORACLE_HOME no siempre lleva ese nombre, al momento de realizar la instalación inicial es posible cambiarle el nombre.



La carpeta se reconoce por ser la carpeta raíz tanto del WLS (wlserver) como de los dominios creados (user_projects).

En este ejercicio, asumimos que tenemos creado un dominio con el nombre por default:
 
base_domain.


Validación de JDK

La versión 12.2.1 de WLS requiere la versión 8 del JDK, de preferencia el JDK debe ser con HotSpot, la JVM de Oracle.
 
%> java -version
java version "1.8.0_77"
Java(TM) SE Runtime Environment (build 1.8.0_77-b03)
Java HotSpot(TM) 64-Bit Server VM (build 25.77-b03, mixed mode)
PS C:\Oracle\OracleHome1221c\wlserver\server\lib>
 

Validación de Maven.​

En el caso de Apache Maven, para este ejercicio usaremos la versión 3.3.9.
 
%> mvn -version
Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-10T10:41:47-06:00)
Maven home: C:\opt\apache\apache-maven-3.3.9-bin\apache-maven-3.3.9\bin\..
Java version: 1.8.0_77, vend​or: Oracle Corporation
Java home: C:\opt\java\8u77\jre
Default locale: es_ES, platform encoding: Cp1252
OS name: "windows 10", version: "10.0", arch: "amd64", family: "dos"
PS C:\Oracle\OracleHome1221c\wlserver\server\lib>​


Instalación.

Teniendo todo listo, iniciamos con la instalación.

Paso 1.
El primer paso es agregar un artefacto que se encargará de sincronizar todos los artefactos que Oracle tiene registrados en su repositorio Maven con nuestra maquina local.

El artefacto a registrar se encuentra en:
 $ORACLE_HOME\oracle_common\plugins\maven\com\oracle\maven\oracle-maven-sync\12.2.1

Y se llama:

 

​oracle-maven-sync-12.2.1.jar
​oracle-maven-sync-12.2.1.pom

Ubicación del artefacto de sincronización.
 

Nos debemos ubicar en esa carpeta y ejecutar la siguiente línea:

mvn install:install-file -DpomFile="oracle-maven-sync-12.2.1.pom" -Dfile="oracle-maven-sync-12.2.1.jar"

Este es un ejemplo de la salida de la consola:
 
​PS C:\Oracle\Middleware\Oracle_Home\oracle_common\plugins\maven\com\oracle\maven\oracle-maven-sync\12.2.1>   
mvn install:install-file -DpomFile="oracle-maven-sync-12.2.1.pom" -Dfile="oracle-maven-sync-12.2.1.jar"

[INFO] Scanning for projects...
Downloading: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-install-plugin/2.4/maven-install-plugin-2.4.pom



Downloading: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-install-plugin/2.4/maven-install-plugin-2.4.jar
Downloaded: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-install-plugin/2.4/maven-install-plugin-2.4.jar (27 KB at 102.4 KB/sec)
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building Maven Stub Project (No POM) 1
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-install-plugin:2.4:install-file (default-cli) @ standalone-pom ---
Downloading: https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-utils/3.0.5/plexus-utils-3.0.5.pom
Downloaded: https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-utils/3.0.5/plexus-utils-3.0.5.pom (3 KB at 9.3 KB/sec)
Downloading: https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus/3.1/plexus-3.1.pom



Downloaded: https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-utils/3.0.5/plexus-utils-3.0.5.jar (226 KB at 84.5 KB/sec)
[INFO] Installing C:\Oracle\Middleware\Oracle_Home\oracle_common\plugins\maven\com\oracle\maven\oracle-maven-sync\ 12.2.1\oracle-maven-sync-12.2.1.jar to C:\Users\Angelino\.m2\repository\com\ora
cle\maven\oracle-maven-sync\12.2.1-0-0\oracle-maven-sync-12.2.1-0-0.jar
[INFO] Installing C:\Oracle\Middleware\Oracle_Home\oracle_common\plugins\maven\com\oracle\maven\oracle-maven-sync\ 12.2.1\oracle-maven-sync-12.2.1.pom to C:\Users\Angelino\.m2\repository\com\ora
cle\maven\oracle-maven-sync\12.2.1-0-0\oracle-maven-sync-12.2.1-0-0.pom
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 10.129 s
[INFO] Finished at: 2016-05-07T21:18:03-05:00
[INFO] Final Memory: 8M/105M
[INFO] ------------------------------------------------------------------------
PS C:\Oracle\Middleware\Oracle_Home\oracle_common\plugins\maven\com\oracle\maven\oracle-maven-sync\12.2.1>​

​Podemos validar la instalación del plugin con la siguiente línea:

mvn help:describe -Dplugin="com.oracle.maven:oracle-maven-sync" -Ddetail

Este es un ejemplo de salida de consola para la ejecución de la línea anterior:
 
​PS C:\Oracle\Middleware\Oracle_Home\oracle_common\plugins\maven\com\oracle\maven\oracle-maven-sync\12.2.1> 
mvn help:describe -Dplugin="com.oracle.maven:oracle-maven-sync" -Ddetail
[INFO] Scanning for projects...
Downloading: 
https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-deploy-plugin/2.7/maven-deploy-plugin-2.7.pom
Downloaded: 
https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-deploy-plugin/2.7/maven-deploy-plugin-2.7.pom 
(6 KB at 5.5 KB/sec)
Downloading: 
https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-site-plugin/3.3/maven-site-plugin-3.3.pom
…
…
…
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building Maven Stub Project (No POM) 1
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-help-plugin:2.2:describe (default-cli) @ standalone-pom ---
Downloading: 
https://repo.maven.apache.org/maven2/org/apache/maven/maven-artifact/2.2.1/maven-artifact-2.2.1.pom
Downloading: 
https://repo.maven.apache.org/maven2/org/apache/maven/maven/2.2.1/maven-
…
…
…
Downloaded: 
https://repo.maven.apache.org/maven2/commons-lang/commons-lang/2.4/commons-lang-2.4.jar (256 KB at 22.7 KB/sec)
Downloading: 
https://repo.maven.apache.org/maven2/com/oracle/maven/oracle-maven-sync/maven-metadata.xml
[INFO] com.oracle.maven:oracle-maven-sync:12.2.1-0-0

Name: Oracle Maven Synchronization Plugin
Description: Maven plugin to load a Maven repository with the contents of the
  Oracle Home directory
Group Id: com.oracle.maven
Artifact Id: oracle-maven-sync
Version: 12.2.1-0-0
Goal Prefix: oracle-sync

This plugin has 2 goals:

oracle-sync:help
  Description: Display help.
  Implementation: com.oracle.maven.sync.ODMHelp
  Language: java

  This mojo doesn't use any parameters.

oracle-sync:push
  Description: Install to the local repository and optionally deploy to a
    remote repository from the specified oracle home
 
    The plugin will use your current Maven settings to determine the path to
    the local repository and, optionally, a remote deployment repository. For
    details on how to configure Maven's repository settings, see the Maven
    settings reference: http://maven.apache.org/settings.html

    You can specify the parameters on the command line like this:
    -DserverId=archiva-internal -DdryRun=false -DfailOnError=false

    To override the localRepository target used by the plugin, you can specify
    the following option on the command-line:
    -Dmaven.local.repo=/alternate/path/to/repository

    To supply an alternate settings.xml for purposes of this operation, use the
    --settings option. For example:

     mvn --settings /alternate/path/settings.xml ...
    ...or in your POM like this:
     <plugin>
         <groupId>com.oracle.maven</groupId>
         <artifactId>oracle-maven-sync</artifactId>
         <version>12.2.1-0-0</version>
         <configuration>
           <oracleHome>/home/mark/Oracle/Middleware</oracleHome>
           <failOnError>false</failOnError>
         </configuration>
       </plugin>
  Implementation: com.oracle.maven.sync.ODMPushMojo
  Language: java

  Available parameters:

    dryRun (Default: false)
      User property: dryRun
      If set to 'true' this goal execution will only log push actions but will
      not actually make any changes.

    failOnError (Default: true)
      User property: failOnError
      If set to 'true' the plugin will stop and return an error immediately
      upon the first failure to deploy an artifact. Otherwise, the plugin will
      log the error and attempt to complete deployment of all other artifacts.

    localRepository (Default: ${localRepository})
      Provide an alternate local repository path to install pushed artifacts
      to.

    oracleHome
      User property: oracleHome
      Path to the Oracle home.
      Required.

    overwriteParent (Default: false)
      User property: overwriteParent
      If true, the plugin will overwrite POM artifacts with ancestry to
      oracle-common if they exist in the target repository. The default value
      of false will prevent automatic overwrite of customized POM contents. If
      any such POMs are encountered during plugin execution, an error will be
      thrown and handled according to the failOnError flag value. To carry over
      changes, save the existing POMs, run the push goal with
      overwriteParent=true and manually transfer the changes to the newly
      pushed POMs.

    pushDuplicates (Default: false)
      User property: pushDuplicates
      Push all duplicate locations. If multiple POMs with different Maven
      coordinates (GAV) are assigned to the same location path, the plugin will
      push them all to the destination repository if this flag is true.
      If the value is false, the push operation will fail. Set failOneError to
      false if you would like to skip all duplicates except the GAV in the set
      of duplicates that is encountered first.

    serverId
      User property: serverId
      This is the ID of the server (repository) in your settings.xml file -
      where you have specified the remote Maven repository and its
      authentication information. The plugin will only install to the local
      repository if this parameter is not set.
 
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 36.052 s
[INFO] Finished at: 2016-05-07T21:24:32-05:00
[INFO] Final Memory: 11M/134M
[INFO] ------------------------------------------------------------------------
PS C:\Oracle\Middleware\Oracle_Home\oracle_common\plugins\maven\com\oracle\maven\oracle-maven-sync\12.2.1>

El artefacto de sincronización está listo.

Paso 2
- El siguiente paso es utilizar este artefacto e iniciar la sincronización. Esto se hace ejecutando esta línea:
 
​mvn com.oracle.maven:oracle-maven-sync:push -DoracleHome=$ORACLE_HOME

Para nuestro ejercicio esta línea equivale a:
 
​mvn com.oracle.maven:oracle-maven-sync:push -DoracleHome=C:\Oracle\Middleware\Oracle_Home

Este es un ejemplo de salida para la ejecución de este comando.

(Esta es la parte que consume más tiempo durante la instalación del plugin, aquí es donde se sincroniza nuestro repositorio local de
Maven con los de Oracle)
 

​PS C:\Oracle\Middleware\Oracle_Home\oracle_common\plugins\maven\com\oracle\maven\oracle-maven-sync\12.2.1> 
mvn com.oracle.maven:oracle-maven-sync:push -DoracleHome=C:\Oracle\Middleware\Oracle_Home
...
...
...
....
[INFO] Installing C:\Oracle\Middleware\Oracle_Home\oui\plugins\maven\com\oracle\fmwshare\inhlp_zh_TW\
12.2.1\inhlp_zh_TW-12.2.1.pom to C:\Users\Angelino\.m2\repository\com\oracle\fmwshare\inhlp_
zh_TW\12.2.1-0-0\inhlp_zh_TW-12.2.1-0-0.pom
[INFO] Found 1 POM files with no associated location file in C:\Oracle\Middleware\Oracle_Home\oui\plugins\maven
[INFO] Installing C:\Oracle\Middleware\Oracle_Home\oui\plugins\maven\com\oracle\fmwshare\oracle.as.install.common.help\
12.2.1\oracle.as.install.common.help-12.2.1.pom to C:\Users\Angelino\.m2\r
epository\com\oracle\fmwshare\oracle.as.install.common.help\12.2.1-0-0\oracle.as.install.common.help-12.2.1-0-0.pom
[INFO] Installing C:\Oracle\Middleware\Oracle_Home\oui\plugins\maven\com\oracle\fmwshare\oracle.as.install.common.help\
12.2.1\oracle.as.install.common.help-12.2.1.pom to C:\Users\Angelino\.m2\r
epository\com\oracle\fmwshare\oracle.as.install.common.help\12.2.1-0-0\oracle.as.install.common.help-12.2.1-0-0.pom
[INFO] SUMMARY
[INFO] ------------------------------------------------------------------------
[INFO] PUSH SUMMARY - ARTIFACTS PROCESSED SUCCESSFULLY
[INFO] ------------------------------------------------------------------------
[INFO] Number of artifacts pushed: 1871
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] PUSH SUMMARY - ERRORS ENCOUNTERED
[INFO] ------------------------------------------------------------------------
[INFO] No issues encountered.
[INFO]
[INFO] IMPORTANT NOTE
[INFO] This operation may have added/updated archetypes in your repository.
[INFO] To update your archetype catalog, you should run:
[INFO] 'mvn archetype:crawl -Dcatalog=$HOME/.m2/archetype-catalog.xml'
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 05:16 min
[INFO] Finished at: 2016-05-07T21:39:09-05:00
[INFO] Final Memory: 11M/97M
[INFO] ------------------------------------------------------------------------
PS C:\Oracle\Middleware\Oracle_Home\oracle_common\plugins\maven\com\oracle\maven\oracle-maven-sync\12.2.1>

Paso 3-
Como podemos observar, al finalizar la ejecución aparece un mensaje que nos indica que, si bien nuestro repositorio local tiene ya los arquetipos, debemos de actualizar nuestro catálogo local.

Esto se hace con la línea:
 
​'mvn archetype:crawl -Dcatalog=$HOME/.m2/archetype-catalog.xml'​

En este caso, HOME, equivale a la carpeta dónde se encuentre la carpeta .m2, esta carpeta contiene nuestro repositorio Maven local y por lo general está en la carpeta de nuestro usuario.
 

Entonces, para nuestro ejercicio esa línea equivale a:
​
mvn archetype:crawl -Dcatalog=C:/Users/Angelino/.m2/archetype-catalog.xml

Esta es la salida a consola al ejecutar la línea anterior:
(Dado que ahora sólo es parsear el repositorio local, esta tarea tarda mucho menos que la anterior).
 
PS C:\Oracle\Middleware\Oracle_Home\oracle_common\plugins\maven\com\oracle\maven\oracle-maven-sync\12.2.1> 
mvn archetype:crawl -Dcatalog=C:/Users/Angelino/.m2/archetype-catalog.xml
....
...
...
....
[INFO] Scanning C:\Users\Angelino\.m2\repository\xmlpull\xmlpull\1.1.3.1\xmlpull-1.1.3.1.jar
[INFO] Scanning C:\Users\Angelino\.m2\repository\xpp3\xpp3_min\1.1.4c\xpp3_min-1.1.4c.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 01:05 min
[INFO] Finished at: 2016-05-08T06:13:59-05:00
[INFO] Final Memory: 15M/304M
[INFO] ------------------------------------------------------------------------
PS C:\Oracle\Middleware\Oracle_Home\oracle_common\plugins\maven\com\oracle\maven\oracle-maven-sync\12.2.1>

Paso 4.
El siguiente paso es registrar el plugin en nuestra instalación de Maven, para ello, sólo debemos agregar un par de líneas al archivo:
 
~/.m2/settings.xml​

Este archivo se encuentra en la misma carpeta .m2 dentro de nuestro usuario.
 
(Si por alguna razón no tienes ese archivo, puedes bajarlo de este link: settings.xml​, toma en cuenta que para este ejercicio usamos usando Apache Maven 3.3.9)

Las líneas que hay que agregar son:
 
<pluginGroups>
​    <pluginGroup>com.oracle.weblogic</pluginGroup>
</pluginGroups>

Paso 5.
El último paso es validar que el plugin ha agregado los arquetipos para proyectos en WLS, eso lo hacemos listado los arquetipos actuales.

La línea:
 
​mvn archetype:generate

El plugin Maven para WLS 12.2.1 está listo para usarse. Puede continuar su lectura y aprender su uso en este artículo:
Weblogic 12.2.1. Uso del plugin Maven

Rerencias:

Isaac Ruiz Guerra(@rugi), es programador Java yConsultor TI. Especializado en integración de sistemas, fundamentalmente relacionados con el sector financiero. Actualmente forma parte del equipo de S&P Solutions. Escribe en su blog personal xhubacubi.blogspot.com, pero también participa y pertenece a www.javahispano.org y a www.javamexico.org

Este artículo ha sido revisado por el equipo de productos Oracle y se encuentra en cumplimiento de las normas y prácticas para el uso de los productos Oracle.