Para permitir el despliegue en Weblogic con Maven, es necesario instalar el plugin de Oracle.
La instalación debe hacerse desde la consola de Maven, en una instalación stand-alone de Maven se accede a la consola, y si se usa el Maven integrado en el Eclipse, se puede hacer a través del IDE.
En ésta entrada se mostrará a través de Eclipse.
(NOTA: Si no tiene experiencia con Maven, es recomendable realizar éste tutorial después de haber terminado el tutorial Hola Mundo de Spring para estar familiarizado con los conceptos del POM.)
(NOTA: Si no tiene experiencia con Maven, es recomendable realizar éste tutorial después de haber terminado el tutorial Hola Mundo de Spring para estar familiarizado con los conceptos del POM.)
Ubicar la librería
Ubicar la librería: oracle-maven-sync-12.2.1.jar
en su directorio de instalación de Weblogic 12c Local, por ejemplo:
C:\Oracle\Middleware122100\Oracle_Home\oracle_common\plugins\maven\com\oracle\maven\oracle-maven-sync\12.2.1
Crear un proyecto dummy en Eclipse
Crear
un proyecto Dummy de Maven, sin
arquetipos llamado Lib:
En Eclipse New --> Maven Project
Una vez creado el proyecto, ir a la ubicación del proyecto y
copiar los dos archivos de la librería desde C:\Oracle\Middleware122100\Oracle_Home\oracle_common\plugins\maven\com\oracle\maven\oracle-maven-sync\12.2.1
a la ruta raíz del proyecto Lib.
Instalar la librería
Ejecutar desde Eclipse el siguiente comando de Maven:
Menu Run --> Run Configurations…
Sobre
Maven Build --> New:
Aparece:
Asignar un nombre como: Install_WeblogicSync
Con el botón Workspace, seleccionar el proyecto
dummy Lib creado.
Finalmente
en el campo Goals pegar el comando:
install:install-file -DpomFile="oracle-maven-sync-12.2.1.pom" -Dfile="oracle-maven-sync-12.2.1.jar"
--> Apply --> Run...
Esta debería ser la salida de la consola indicando que la instalación se hizo satisfactoriamente:
Para verificar la instalación se puede ejecutar el siguiente comando repitiendo los pasos anteriores:
El
resultado final debería ser similar a:
Iniciar sincronización con Oracle
De la misma manera que los comandos anteriores, desde eclipse, ejecutar el comando Maven de Sincronización, donde se usa el comando push para la instalación del repositorio local del plugin.
El parámetro DoracleHome especifica la ruta de instalación de su Weblogic:
--> Apply --> Run...
Esta debería ser la salida de la consola indicando que la instalación se hizo satisfactoriamente:
[INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building Lib 0.0.1-SNAPSHOT [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-install-plugin:2.4:install-file (default-cli) @ Lib --- [INFO] Installing C:\eclipse_work\workspace\Lib\oracle-maven-sync-12.2.1.jar to C:\Users\Marìa juliana\.m2\repository\com\oracle\maven\oracle-maven-sync\12.2.1-0-0\oracle-maven-sync-12.2.1-0-0.jar [INFO] Installing C:\eclipse_work\workspace\Lib\oracle-maven-sync-12.2.1.pom to C:\Users\Marìa juliana\.m2\repository\com\oracle\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: 0.845 s [INFO] Finished at: 2016-09-24T21:02:36-05:00 [INFO] Final Memory: 6M/155M [INFO] ------------------------------------------------------------------------
Para verificar la instalación se puede ejecutar el siguiente comando repitiendo los pasos anteriores:
help:describe -Dplugin="com.oracle.maven:oracle-maven-sync" -Ddetail
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:For more information, run 'mvn help:describe [...] -Ddetail' [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 9.992 s [INFO] Finished at: 2016-09-24T21:07:09-05:00 [INFO] Final Memory: 11M/133M [INFO] ------------------------------------------------------------------------ com.oracle.maven oracle-maven-sync 12.2.1-0-0 /home/mark/Oracle/Middleware false
Iniciar sincronización con Oracle
De la misma manera que los comandos anteriores, desde eclipse, ejecutar el comando Maven de Sincronización, donde se usa el comando push para la instalación del repositorio local del plugin.
El parámetro DoracleHome especifica la ruta de instalación de su Weblogic:
C:\Oracle\Middleware122100\Oracle_Home
com.oracle.maven:oracle-maven-sync:push -DoracleHome=C:\Oracle\Middleware122100\Oracle_Home
Este proceso puede tardar un poco porque sincroniza el
repositorio local de Maven (.m2) con
el repositorio de Oracle. La salida deberá ser similar a:
SUMMARY [INFO] ------------------------------------------------------------------------ [INFO] PUSH SUMMARY - ARTIFACTS PROCESSED SUCCESSFULLY [INFO] ------------------------------------------------------------------------ [INFO] Number of artifacts pushed: 4540 [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: 10:24 min [INFO] Finished at: 2016-09-24T21:26:26-05:00 [INFO] Final Memory: 11M/89M [INFO] ------------------------------------------------------------------------
Como
indica la salida del paso anterior, ([INFO] To update your archetype catalog, you should
run: [INFO] 'mvn archetype:crawl -Dcatalog=$HOME/.m2/archetype-catalog.xml')se debe ahora realizar la actualización del
catálogo local con el siguiente comando siguiendo nuevamente los mismos pasos:
archetype:crawl -Dcatalog=C:/Users/[su_usuario]/.m2/archetype-catalog.xml
Donde
se debe especificar la ubicación del directorio .m2 local.
[INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 26.524 s [INFO] Finished at: 2016-09-24T21:35:17-05:00 [INFO] Final Memory: 11M/223M [INFO] ------------------------------------------------------------------------
Modificar /.m2/settings.xml
Se debe agregar el plugin
group a /.m2/settings.xml:
Abrir el archivo /.m2/settings.xml, ubicar las
etiquetas <pluginGroups> y adicionar:
<pluginGroups> <!-- pluginGroup | Specifies a further group identifier to use for plugin lookup. <pluginGroup>com.your.plugins</pluginGroup> --> <pluginGroup>com.oracle.weblogic</pluginGroup> </pluginGroups>
Uso del plugin
Para
usar el plugin desde Eclipse existen dos formas, apoyándose en el POM.xml y con
parámetros desde comandos. En este ejemplo para mostrar las dos formas se
configurará el DEPLOY desde POM, y
el UNDEPLOY desde comandos.
Uso con POM.XML
Si existe la etiqueta: <pluginManagement> dentro de la etiqueta <build> eliminarla.
Adicionar en la lista de plugins, la configuración del plugin weblogic-maven-plugin: Donde se especifica, servidor Weblogic, usuario y contraseña, fuente, destino, etc. En éste ejemplo para no repetir el nombre del war se ha creado la variable DName en la etiqueta de propiedades, de manera similar a como se usa para manejar versiones:
<properties> <java.version>1.8</java.version> <DName>SpringRest01</DName> </properties>El fragmento del plugin dentro de la lista de plugins de la etiqueta build quedará similar a:
<!-- Oracle Weblogic --> <plugin> <groupId>com.oracle.weblogic</groupId> <artifactId>weblogic-maven-plugin</artifactId> <version>12.2.1-0-0</version> <executions> <!--Deploy the application to the server--> <execution> <id>wls-deploy</id> <phase>pre-integration-test</phase> <goals> <goal>deploy</goal> </goals> <configuration> <!--The admin URL where the app is deployed. Here use the plugin's default value t3://localhost:7001--> <!--adminurl>http://localhost:7001</adminurl--> <user>weblogic</user> <password>weblogic1</password> <!--The location of the file or directory to be deployed--> <source>${project.build.directory}/${DName}.${project.packaging}</source> <!--The target servers where the application is deployed. Here use the plugin's default value AdminServer--> <targets>ClusterHome</targets> <verbose>true</verbose> <!--The deployment name of the application--> <name>${DName}</name> </configuration> </execution> </executions> </plugin>
Donde se
especifica: El GAV del plugin y los detalles de la ejecución para el goal
deploy.
Allí se especifica servidor, usuario y contraseña.
Además la fuente que para el caso usa la variable DName creada, y referencia a project.build.directory que es el directorio target del proyecto, y define la
extensión con project.packaging que para el caso es WAR según como se
definió en el POM <packaging>war</packaging>.
Adicionar la etiqueta distributionManagement que especifica la URL del repositorio local
de Maven, es decir el directorio .m2.
<!-- distribution --> <distributionManagement> <repository> <uniqueVersion>false</uniqueVersion> <id>WLIntegr</id> <name>WLS Integrate</name> <url>file:///C:/Users/SU_USUARIO/.m2/repository/</url> <layout>default</layout> </repository> </distributionManagement>Para éste ejemplo el POM.XML completo queda similar 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>spring.io.guide01 </groupId> <artifactId>spring.io.guide01 </artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <dependencies> <!-- Spring MVC --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>4.3.2.RELEASE</version> </dependency> <!-- Jackson Core (Conver to JSON) --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.5.3</version> </dependency> <!-- Servlet --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> </dependency> </dependencies> <properties> <java.version>1.8</java.version> <DName>SpringRest01</DName> </properties> <!-- distribution --> <distributionManagement> <repository> <uniqueVersion>false</uniqueVersion> <id>WLIntegr</id> <name>WLS Integrate</name> <url>file:///C:/Users/SU_USUARIO/.m2/repository/</url> <layout>default</layout> </repository> </distributionManagement> <build> <plugins> <!-- MavenCompiler --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.5.1</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> <!-- WAR config --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>2.4</version> <configuration> <warSourceDirectory>src/main/webapp</warSourceDirectory> <warName>${DName}</warName> <failOnMissingWebXml>false</failOnMissingWebXml> </configuration> </plugin> <!-- Oracle Weblogic --> <plugin> <groupId>com.oracle.weblogic</groupId> <artifactId>weblogic-maven-plugin</artifactId> <version>12.2.1-0-0</version> <executions> <!--Deploy the application to the server--> <execution> <id>wls-deploy</id> <phase>pre-integration-test</phase> <goals> <goal>deploy</goal> </goals> <configuration> <!--The admin URL where the app is deployed. Here use the plugin's default value t3://localhost:7001--> <!--adminurl>http://localhost:7001</adminurl--> <user>weblogic</user> <password>weblogic1</password> <!--The location of the file or directory to be deployed--> <source>${project.build.directory}/${DName}.${project.packaging}</source> <!--The target servers where the application is deployed. Here use the plugin's default value AdminServer--> <targets>ClusterHome</targets> <verbose>true</verbose> <!--The deployment name of the application--> <name>${DName}</name> </configuration> </execution> </executions> </plugin> </plugins> </build> </project>
Se
debe actualizar el proyecto Maven (ALT +
F5) para que tome los cambios en el POM.XML
Ejecutar el despliegue
Como se ha visto anteriormente se hará la ejecución vía Run --> Run Configurations…
- Name: Deploy
- Base Directory: En Workspace seleccionar el proyecto.
- Goals: compile package deploy
Apply --> Run: La consola deberá tener una salida similar a:
… … [INFO] --- weblogic-maven-plugin:12.2.1-0-0:deploy (wls-deploy) @ spring.io.guide01.noBoot --- [INFO] Command flags are: -noexit -deploy -username weblogic -password ******* -name SpringRest01 -source C:\eclipse_work\workspace\spring.io.guide01.noBoot\target\SpringRest01.war -targets ClusterHome -verbose -adminurl t3://localhost:7001 weblogic.Deployer invoked with options: -noexit -deploy -username weblogic -name SpringRest01 -source C:\eclipse_work\workspace\spring.io.guide01.noBoot\target\SpringRest01.war -targets ClusterHome -verbose -adminurl t3://localhost:7001 <25 10:33:28="" am="" cot="">25> Task 42 initiated: [Deployer:149026]deploy application SpringRest01 on ClusterHome. Task 42 completed: [Deployer:149026]deploy application SpringRest01 on ClusterHome. Target state: deploy completed on Cluster ClusterHome Target Assignments: + SpringRest01 ClusterHome [INFO] [INFO] --- maven-install-plugin:2.4:install (default-install) @ spring.io.guide01.noBoot --- [INFO] Installing … … [INFO] [INFO] --- maven-deploy-plugin:2.7:deploy (default-deploy) @ spring.io.guide01.noBoot --- [INFO] Downloading: file:///C:/Users/USER/.m2/repository/spring/io/guide01/noBoot/spring.io.guide01.noBoot/0.0.1-SNAPSHOT/maven-metadata.xml … … file:///C:/Users/USER/.m2/repository/spring/io/guide01/noBoot/spring.io.guide01.noBoot/maven-metadata.xml (308 B at 75.2 KB/sec) [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 33.521 s [INFO] Finished at: 2016-09-25T10:33:44-05:00 [INFO] Final Memory: 31M/462M [INFO] ------------------------------------------------------------------------
Y
el despliegue se deberá ver reflejado en la lista de despliegues de Weblogic en
el destino seleccionado, por ejemplo:
Como ya se tiene definida la variable DName en las propiedades del POM, se pueda hacer uso de la misma en
los comandos.
Para hacer el unDeploy, se debe construir el
comando especificando PLUGIN:GOAL +
PARAMETROS. Para el ejemplo queda de la siguiente manera:
com.oracle.weblogic:weblogic-maven-plugin:undeploy -Duser=weblogic -Dpassword=weblogic1 -Dname=${DName} -Dadminurl=http://localhost:7101
Donde se ha especificado:
- Usuario: -Duser=weblogic
- Contraseña -Dpassword=weblogic1
- Nombre del despliegue a eliminar: -Dname=${DName}
Ejecutar nuevamente desde Run à
Run Configurations:
- Name: undeploy
- Base Directory: En Workspace seleccionar el proyecto.
- Goals: El comando indicado.
[INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building spring.io.guide01.noBoot 0.0.1-SNAPSHOT [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- weblogic-maven-plugin:12.2.1-0-0:undeploy (default-cli) @ spring.io.guide01.noBoot --- weblogic.Deployer invoked with options: -noexit -undeploy -username weblogic -name SpringRest01 -adminurl t3://localhost:7001 <25 11:01:39="" am="" cot="">25> Task 43 initiated: [Deployer:149026]remove application SpringRest01 on ClusterHome. Task 43 completed: [Deployer:149026]remove application SpringRest01 on ClusterHome. Target state: undeploy completed on Cluster ClusterHome [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 18.207 s [INFO] Finished at: 2016-09-25T11:01:42-05:00 [INFO] Final Memory: 30M/442M [INFO] ------------------------------------------------------------------------
Referencias
- http://www.oracle.com/technetwork/es/articles/servers-storage-dev/instalar-maven-weblogic-server-12c-3074631-esa.html
- https://docs.oracle.com/middleware/1221/wls/WLPRG/maven.htm#WLPRG674
- http://www.oracle.com/technetwork/es/articles/servers-storage-dev/uso-plugin-maven-oracle-weblogic-12-3087254-esa.html
- https://docs.oracle.com/middleware/1212/core/MAVEN/config_maven.htm#MAVEN316