developing liferay plugins with maven

26
Developing Liferay Plugins with Maven Senior Software Engineer Mika Koivisto

Upload: mika-koivisto

Post on 13-May-2015

13.575 views

Category:

Technology


6 download

DESCRIPTION

My Maven presentation on Liferay Nordic Symposium 2012

TRANSCRIPT

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