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

Like this? Share it with your network

Share

Developing Liferay Plugins with Maven

on

  • 13,786 views

My Maven presentation on Liferay Nordic Symposium 2012

My Maven presentation on Liferay Nordic Symposium 2012

Statistics

Views

Total Views
13,786
Views on SlideShare
13,746
Embed Views
40

Actions

Likes
8
Downloads
198
Comments
3

12 Embeds 40

http://nqtung.blogspot.com 19
https://confluence.evozon.com 5
http://nqtung.blogspot.sk 3
http://www.linkedin.com 2
http://nqtung.blogspot.be 2
http://nqtung.blogspot.in 2
http://nqtung.blogspot.fr 2
https://twitter.com 1
http://nqtung.blogspot.ca 1
http://nqtung.blogspot.nl 1
http://nqtung.blogspot.mx 1
http://nqtung.blogspot.cz 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Developing Liferay Plugins with Maven Presentation Transcript

  • 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="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>
  • 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 https://github.com/liferay/liferay-maven-support• JIRA http://issues.liferay.com/browse/MAVEN
  • 26. Contact Email: mika.koivisto@liferay.com Twitter: @koivimik Github: mikakoivisto