Crear un proyecto maven de portlet liferay

De ChuWiki

Veamos como crear con maven un proyecto para hacer un portlet de liferay.

archetype:generate[editar]

El comando maven

mvn archetype:generate

nos da un listado de posibles proyectos que se pueden construir. En el momento de escribir este artículo, tenemos entre otros muchos los siguientes

...
62: remote -> com.liferay.maven.archetypes:liferay-ext-archetype (Provides an archetype to create Liferay extensions.)
63: remote -> com.liferay.maven.archetypes:liferay-hook-archetype (Provides an archetype to create Liferay hooks.)
64: remote -> com.liferay.maven.archetypes:liferay-layouttpl-archetype (Provides an archetype to create Liferay layout templates.)
65: remote -> com.liferay.maven.archetypes:liferay-portlet-archetype (Provides an archetype to create Liferay portlets.)
66: remote -> com.liferay.maven.archetypes:liferay-portlet-icefaces-archetype (Provides an archetype to create Liferay ICEfaces portlets.)
67: remote -> com.liferay.maven.archetypes:liferay-portlet-jsf-archetype (Provides an archetype to create Liferay JSF portlets.)
68: remote -> com.liferay.maven.archetypes:liferay-portlet-liferay-faces-alloy-archetype (Provides an archetype to create Liferay Faces Alloy portlets.)
69: remote -> com.liferay.maven.archetypes:liferay-portlet-primefaces-archetype (Provides an archetype to create Liferay PrimeFaces portlets.)
70: remote -> com.liferay.maven.archetypes:liferay-portlet-richfaces-archetype (Provides an archetype to create Liferay RichFaces portlets.)
71: remote -> com.liferay.maven.archetypes:liferay-servicebuilder-archetype (Provides an archetype to create Liferay Service Builder portlets.)
72: remote -> com.liferay.maven.archetypes:liferay-theme-archetype (Provides an archetype to create Liferay themes.)
73: remote -> com.liferay.maven.archetypes:liferay-web-archetype (Provides an archetype to create Liferay webs.)
...

El comando

mvn archetype:generate -Dfilter=liferay

nos daría el mismo listado, pero filtrando por todos aquellos proyectos cuyo artifactId contenga la palabra liferay, que daría el mismo listado del apartado anterior.

Para nuestro ejemplo, elegimos el 65 del listado anterior, el liferay-portlet-archetype. A continuación nos pide la versión de Liferay para la que deseamos desarrollar el portlet.

Choose com.liferay.maven.archetypes:liferay-portlet-archetype version:
1: 6.0.2
2: 6.0.3
3: 6.0.4
4: 6.0.5
5: 6.0.6
6: 6.1.0
7: 6.1.1
8: 6.1.2
9: 6.1.10
10: 6.1.20
11: 6.1.30
12: 6.2.0-B1
13: 6.2.0-B2
14: 6.2.0-M5
15: 6.2.0-M6

Elegimos la que deseemos. Actualmente la que está disponible en la página de descarga de Liferay es la 6.1.2, así que elegimos la opción 8

Nos pide el groupId para nuestro proyecto

Define value for property 'groupId': :

En mi caso, pondré com.chuidiang.ejemplos.liferay, puede ser cualquier nombre de paquete java que identifique tus proyectos y que no sea probable que otro desarrollador se le ocurra poner.

A continuación pide el artifactId o nombre del proyecto. Este será el nombre del directorio con nuestro proyecto y el nombre del .war que se generará en nuestro proyecto

Define value for property 'artifactId': :

En mi caso pongo EjemploPortletSimpleLiferay. Nos pide a continuación la versión para nuestro proyecto

Define value for property 'version': 1.0-SNAPSHOT:

por defecto 1.0-SNAPSHOT. Este es un buen número de versión para empezar. 1.0 porque es la primera y -SNAPSHOT para que maven sepa que está en desarrollo. Así que simplemente pulsamos el retorno de carro para aceptar el valor por defecto.

Ahora nos pide el nombre del package para nuestras clases, ofreciéndonos por defecto el valor que hemos puesto a nuestro groupId

Define value for property 'package': com.chuidiang.ejemplos.liferay:

Aceptamos el valor por defecto pulsando el retorno de carro, o bien escribimos el nombre de paquete que queramos. En mi caso acepto el valor por defecto. Finalmente, nos muestra todos los datos que hemos introducido para confirmar

Confirm properties configuration:
groupId: com.chuidiang.ejemplos.liferay
artifactId: EjemploPortletSimpleLiferay
version: 1.0-SNAPSHOT
package: com.chuidiang.ejemplos.liferay
Y:

Simplemente pulsamos retorno de carro para aceptar, o escribimos N y retorno de carro para que nos los vuelva a pedir y podamos modificarlos. Una vez aceptado, se creará la estructura de directorios del proyecto con un pequeño ejemplo "hola mundo"

D:\PROYECTOS\EJEMPLOS\EJEMPLOPORTLETSIMPLELIFERAY
└───src
    └───main
        ├───java
        ├───resources
        └───webapp
            ├───css
            ├───js
            └───WEB-INF

En css tendremos un main.css vacío, en js un main.js vacío, un icon.png en webapp para nuestro portlet y el view.jsp. Debajo de WEB-INF tenemos los ficheros xml propios de un portlet liferay.

Algunos arreglos[editar]

Si vemos el pom.xml generado, veremos que hay una serie de variables que debemos definir, como la versión de liferay, del plugin, etc

				<groupId>com.liferay.maven.plugins</groupId>
				<artifactId>liferay-maven-plugin</artifactId>
				<version>${liferay.maven.plugin.version}</version>
				<configuration>
					<autoDeployDir>${liferay.auto.deploy.dir}</autoDeployDir>
					<appServerDeployDir>${liferay.app.server.deploy.dir}</appServerDeployDir>
					<appServerLibGlobalDir>${liferay.app.server.lib.global.dir}</appServerLibGlobalDir>
					<appServerPortalDir>${liferay.app.server.portal.dir}</appServerPortalDir>
					<liferayVersion>${liferay.version}</liferayVersion>
					<pluginType>portlet</pluginType>
				</configuration>

Necesitamos eidtar el pom.xml y añadir unas properties con estos valores, algo como esto

   <properties>
        <liferay.version>6.1.2</liferay.version>
        <liferay.maven.plugin.version>6.1.2</liferay.maven.plugin.version>
        ...
   </properties>
   <build>

Puede ser interesante también definir la propiedad liferay.auto.deploy.dir que aparece en autoDeployDir con el directorio deploy de donde tenemos instalado liferay, de forma que con un comando maven podamos copiar el war generado en el directorio de deploy de liferay. Puede ser algo como esto

<liferay.auto.deploy.dir>//c:/aplicaciones/liferay-xxx/deploy/</liferay.auto.deploy.dir>

Compilado y despliegue[editar]

para compilar el proyecto y generar el war, nos basta con ejecutar el comando

mvn package

crea un directorio target en nuestro proyecto y mete dentro el fichero EjemploPortletSimpleLiferay-1.0-SNAPSHOT.war

Si hemos definido la propiedad liferay.auto.deploy.dir en el pom.xml, el comando maven

mvn liferay:deploy

genera si hace falta y copia este fichero war en el directorio deploy de liferay, de forma que nuestro portlet "hola mundo" estará listo para usar en nuestro liferay.