Your SlideShare is downloading. ×
Developing Liferay Plugins with Maven
Upcoming SlideShare
Loading in...5

Thanks for flagging this SlideShare!

Oops! An error has occurred.

Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Developing Liferay Plugins with Maven


Published on

My Maven presentation on Liferay Nordic Symposium 2012

My Maven presentation on Liferay Nordic Symposium 2012

Published in: Technology
No Downloads
Total Views
On Slideshare
From Embeds
Number of Embeds
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

No notes for slide


  • 1. Developing Liferay Plugins withMavenMika KoivistoSenior Software Engineer
  • 2. Agenda• Quick Introduction to Maven• Liferay Maven Support• Demo• Future Plans
  • 3. Quick Introduction to Maven• Project management tool (build, test, report, assemble, release)• Small core expandable with plugins• Convention over configuration• Dependency management• Common lifecycle
  • 4. 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>
  • 5. Same in Maven<project> <modelVersion>4.0.0</modelVersion> <groupId>com.liferay.sample</groupId> <artifactId>my-project</artifactId> <version>1.0-SNAPSHOT</version></project>
  • 6. 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
  • 7. Dependency Management• Declarative• Transitive• Identified by: groupId, artifactId, version and type combination• Scoped: compile, provided, runtime, test or system
  • 8. 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
  • 9. 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
  • 10. What is Artifact?• Product of build• Described by pom.xml• Identified with combination of groupId, artifactId, version and qualifier
  • 11. What is Archetype?• Project template• Available for various project types• Run mvn archetype:generate to create interactively or specify with parameters mvn 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
  • 12. 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
  • 13. Liferay Portal Artifacts• GroupId: com.liferay.portal• ArtifactId: • portal-client • portal-impl • portal-service • portal-web • support-tomcat • util-bridges • util-java • util-taglib
  • 14. 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
  • 15. 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
  • 16. 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
  • 17. Demo
  • 18. 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
  • 19. Sample Parent Project Pom<project xmlns="" xmlns:xsi="" xsi:schemaLocation=""> <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> <>/opt/liferay-portal-6.1.10-ee-ga1/deploy</> </properties></project>
  • 20. 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:deployormvn liferay:direct-deploy -DdeployDir=/opt/liferay/tomcat/webapps
  • 21. Service Builder Module• Creates separate portlet and service api sub projects• Build service from -portletmvn liferay:build-service• Deploy from -portletmvn liferay:deployormvn liferay:direct-deploy -DdeployDir=/opt/liferay/tomcat/webapps
  • 22. 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
  • 23. 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
  • 24. Future Plans• IDE integration • Liferay IDE • Liferay Developer Studio• More archetypes (liferay faces, spring mvc, etc.)• Liferay Bundle Builder
  • 25. Contributing• Github project• JIRA
  • 26. Contact Email: Twitter: @koivimik Github: mikakoivisto