Developing Liferay Plugins with Maven

26
Developing Liferay Plugins with Maven Senior Software Engineer Mika Koivisto

description

My Maven presentation on Liferay Nordic Symposium 2012

Transcript of Developing Liferay Plugins with Maven

Page 1: Developing Liferay Plugins with Maven

Developing Liferay Plugins with Maven

Senior Software EngineerMika Koivisto

Page 2: Developing Liferay Plugins with Maven

Agenda

• Quick Introduction to Maven

• Liferay Maven Support

• Demo• Future Plans

Page 3: Developing Liferay Plugins with Maven

Quick Introduction to Maven

• Project management tool (build, test, report, assemble, release)

• Small core expandable with plugins• Convention over configuration

• Dependency management

• Common lifecycle

Page 4: Developing Liferay Plugins with Maven

Typical Ant build.xml<project name="my-project" default="dist" basedir="."> <property name="src" location="src/main/java"/> <property name="build" location="target/classes"/> <property name="dist" location="target"/>

<target name="init"> <tstamp/> <mkdir dir="${build}"/> </target>

<target name="compile" depends="init" description="compile the source " > <javac srcdir="${src}" destdir="${build}"/> </target>

<target name="dist" depends="compile"> <mkdir dir="${dist}/lib"/>

<jar jarfile="${dist}/lib/MyProject-${DSTAMP}.jar" basedir="${build}"/> </target>

<target name="clean"> <delete dir="${build}"/> <delete dir="${dist}"/> </target></project>

Page 5: Developing Liferay Plugins with Maven

Same in Maven<project> <modelVersion>4.0.0</modelVersion> <groupId>com.liferay.sample</groupId> <artifactId>my-project</artifactId> <version>1.0-SNAPSHOT</version></project>

Page 6: Developing Liferay Plugins with Maven

The Project Object Model

• Analogous to Makefile or build.xml

• Versioned <major>.<minor>.<increment>-<qualifier>

• Packaging (pom, jar, war, ejb, ear, etc.)• Inheritance

• Sub-modules

• Dependencies

• Profiles

• Properties

Page 7: Developing Liferay Plugins with Maven

Dependency Management

• Declarative

• Transitive

• Identified by: groupId, artifactId, version and type combination

• Scoped: compile, provided, runtime, test or system

Page 8: Developing Liferay Plugins with Maven

Build Lifecycle

• Build-in lifecycles: default, clean and site

• Lifecycles have phases

• Goals are attached to phases• Common phases:

• clean

• compile

• test

• package• install

• deploy

Page 9: Developing Liferay Plugins with Maven

Repositories

• Place where all artifacts are stored

• Local

• Located in USER_HOME/.m2/repository• Cached copy of downloaded artifacts

• Contains locally installed artifacts

• Remote

• Central

• Internal or external• Proxy or Cache

Page 10: Developing Liferay Plugins with Maven

What is Artifact?

• Product of build

• Described by pom.xml

• Identified with combination of groupId, artifactId, version and qualifier

Page 11: Developing Liferay Plugins with Maven

What is Archetype?

• Project template

• Available for various project types

• Run mvn archetype:generate to create interactively or specify with parametersmvn archetype:generate \

-DarchetypeArtifactId=liferay-portlet-archetype \

-DarchetypeGroupId=com.liferay.maven.archetypes \

-DarchetypeVersion=6.1.0 \

-DgroupId=com.liferay.sample \

-DartifactId=sample-portlet \

-Dversion=1.0-SNAPSHOT \

-DinteractiveMode=false

Page 12: Developing Liferay Plugins with Maven

Liferay Maven Support

• Alternative to ant based plugins sdk

• Compatible with both Liferay 6.1 CE and EE

• CE Portal Artifacts published to Maven Central Repository

• EE Portal Artifacts downloadable from Customer Portal

• Liferay Maven Plugin and Archetypes published to Maven Central Repository for both CE and EE

Page 13: Developing Liferay Plugins with Maven

Liferay Portal Artifacts

• GroupId: com.liferay.portal

• ArtifactId:

• portal-client• portal-impl

• portal-service

• portal-web

• support-tomcat

• util-bridges• util-java

• util-taglib

Page 14: Developing Liferay Plugins with Maven

Liferay Maven Plugin

• GroupId: com.liferay.maven.plugins

• ArtifactId: liferay-maven-plugin

• Brings features from Plugins SDK to Maven• Service Builder

• Theme diffs

• Direct Deployment

Page 15: Developing Liferay Plugins with Maven

Liferay Maven Plugin Goals

• liferay:build-ext

• liferay:build-lang

• liferay:build-service• liferay:build-thumbnail

• liferay:build-wsdd

• liferay:deploy

• liferay:direct-deploy

• liferay:theme-merge

Page 16: Developing Liferay Plugins with Maven

Liferay Archetypes

• GroupId: com.liferay.maven.archetypes

• ArtifactId:

• liferay-ext-archetype• liferay-hook-archetype

• liferay-layouttpl-archetype

• liferay-portlet-archetype

• liferay-servicebuilder-archetype

• liferay-theme-archetype• liferay-web-archetype

Page 17: Developing Liferay Plugins with Maven

Demo

Page 18: Developing Liferay Plugins with Maven

Parent Project

• Vaguely equivalent to plugins sdk instance

• Includes all the project modules such as:

• Portlets• Themes

• Layouts

• Contains common project properties such as used Liferay version

Page 19: Developing Liferay Plugins with Maven

<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>com.liferay.sample</groupId> <artifactId>helloworld-project</artifactId> <version>1.0-SNAPSHOT</version> <packaging>pom</packaging> <properties> <liferay.version>6.1.10</liferay.version> <liferay.auto.deploy.dir>/opt/liferay-portal-6.1.10-ee-ga1/deploy</liferay.auto.deploy.dir> </properties>

</project>

Sample Parent Project Pom

Page 20: Developing Liferay Plugins with Maven

Theme Module

• Merges with parent theme during packaging

• Parent theme defined in pom.xml

• Parent can be built-in theme or any war artifact

• Deploy withmvn liferay:deploy

or

mvn liferay:direct-deploy -DdeployDir=/

opt/liferay/tomcat/webapps

Page 21: Developing Liferay Plugins with Maven

• Creates separate portlet and service api sub projects

• Build service from -portletmvn liferay:build-service

• Deploy from -portletmvn liferay:deploy

or

mvn liferay:direct-deploy -DdeployDir=/

opt/liferay/tomcat/webapps

Service Builder Module

Page 22: Developing Liferay Plugins with Maven

Ext Plugin Module

• Similar structure to plugins sdk but mavenized

• Build service from -ext-implmvn liferay:build-service

-DserviceFileName=src/main/resources/

com/liferay/sample/service.xml

• Deploy from -extmvn liferay:build-service

-DserviceFileName=src/main/resources/

com/liferay/sample/service.xml

Page 23: Developing Liferay Plugins with Maven

Maven Best Practices

• Setup internal repository and maven proxy

• Reduces build time by caching dependencies

• Increases build stability and repeatability

• Allows enforcing company policies

• Never use 3rd party SNAPHOT dependencies

• Declare all your dependencies and don’t rely on transitive

dependencies for classes you use

Page 24: Developing Liferay Plugins with Maven

Future Plans

• IDE integration

• Liferay IDE

• Liferay Developer Studio

• More archetypes (liferay faces, spring mvc, etc.)

• Liferay Bundle Builder

Page 25: Developing Liferay Plugins with Maven

Contributing

• Github project

https://github.com/liferay/liferay-maven-support

• JIRA

http://issues.liferay.com/browse/MAVEN

Page 26: Developing Liferay Plugins with Maven

Contact

Email: [email protected]

Twitter: @koivimik

Github: mikakoivisto