Liferay's sample projects provides bootstrap project environments for all major build tools in common use for Java projects so that Liferay development can start quickly and easily. These templates can be copied freely and contributions are welcome. See the Contribution Guidelines for more information on how to contribute new sample projects and/or documentation.
The template projects are categorized under three build tools:
gradle- A set of Liferay projects that can be bootstrapped onto the
com.liferay.plugin(a Gradle plugin) based development environment.
liferay-workspace- A set of Liferay projects configured to work in a Liferay Workspace environment.
maven- A set of Liferay projects that can be bootstrapped onto the Maven development environment.
When contributing a new sample, you must include accompanying documentation.
You can contribute additional template samples by creating the project for one of the three build tools and sending a pull request to
liferay/liferay-blade-samples. A repository admin will review the submission and replicate the project for the other three build tools, once the submission is approved.
You can contribute documentation by adding a
README.markdownfile to the root folder of a sample project. This article should include the following sections:
For example, the Resource Bundle Override article explains the
resource-bundle-overridesample using the aforementioned sections.
You can send a pull request to
codyhoag/liferay-blade-samplesfor documentation-only submissions, or tag
@codyhoagin a new sample contributed to
liferay/liferay-blade-samplesthat includes documentation.
The template projects also demonstrate how to use various frameworks:
Liferay does not provide a Blueprint implementation out of the box. To use the Blueprint modules provided in Blade, you must deploy a Blueprint implementation such as Apache Aries - Blueprint. Three bundles are needed:
Simply download the bundles from mvnrepository and drop them in your
osgi/modulesfolder before deploying Blueprint bundles.
Template project description: Demonstrates the
MVCActionCommandextension point. It integrates the action command named
greetwith portlet
greeter. To see how this example works, a portlet plugin with a portlet named greeter (
javax.portlet.name='greeter') should be deployed. The command adds a key
greeting_messageto Liferay
SessionMessages, along with a session attribute
GREETER_MESSAGE. You can independently deploy the bundle
blade.portlet.actioncommand(i.e., refresh the bundle without the need to redeploy the Portlet plugin).
| Build tool | Link to project's source code | | ---------- | ------------------------------------------------------------------------------- | | Gradle | ./gradle/apps/action-command-portlet | | Liferay Workspace | ./liferay-workspace/apps/action-command-portlet | | Maven | ./maven/apps/action-command-portlet |
Template project description: Demonstrates how to use the Blueprint framework for registering a Liferay MVC portlet.
| Build tool | Link to project's source code | | ---------- | ------------------------------------------------------------------------------- | | Gradle | ./gradle/apps/blueprint-portlet | | Liferay Workspace | ./liferay-workspace/apps/blueprint-portlet | | Maven | ./maven/apps/blueprint-portlet |
Template project description: Demonstrates the
ConfigurationActionintegration point.
| Build tool | Link to project's source code | | ---------- | ------------------------------------------------------------------------------- | | Gradle | ./gradle/apps/configuration-action | | Liferay Workspace | ./liferay-workspace/apps/configuration-action | | Maven | ./maven/apps/configuration-action |
| Build tool | Link to project's source code | | ---------- | ------------------------------------------------------------------------------- | | Gradle | ./gradle/apps/control-panel-portlet | | Liferay Workspace | ./liferay-workspace/apps/control-panel-portlet | | Maven | ./maven/apps/control-panel-portlet |
Template project description: Demonstrates how to use the DS (Declarative Services) framework for registering a Liferay MVC portlet.
| Build tool | Link to project's source code | | ---------- | ------------------------------------------------------------------------------- | | Gradle | ./gradle/apps/ds-portlet | | Liferay Workspace | ./liferay-workspace/apps/ds-portlet | | Maven | ./maven/apps/ds-portlet |
Template project description: Demonstrates how to apply
PortletFilters.
| Build tool | Link to project's source code | | ---------- | ------------------------------------------------------------------------------- | | Gradle | ./gradle/apps/filter-portlet | | Liferay Workspace | ./liferay-workspace/apps/filter-portlet | | Maven | ./maven/apps/filter-portlet |
Template project description: Demonstrates a simple FreeMarker portlet.
| Build tool | Link to project's source code | | ---------- | ------------------------------------------------------------------------------- | | Gradle | ./gradle/apps/freemarker-portlet | | Liferay Workspace | ./liferay-workspace/apps/freemarker-portlet | | Maven | ./maven/apps/freemarker-portlet |
Refer to this sample's Readmes for more information.
| Build tool | Link to project's source code | | ---------- | ------------------------------------------------------------------------------- | | Gradle | ./gradle/apps/greedy-policy-option-portlet | | Liferay Workspace | ./liferay-workspace/apps/greedy-policy-option-portlet | | Maven | ./maven/apps/greedy-policy-option-portlet |
Template project description: Demonstrates a simple JSP portlet.
| Build tool | Link to project's source code | | ---------- | ------------------------------------------------------------------------------- | | Gradle | ./gradle/apps/jsp-portlet | | Liferay Workspace | ./liferay-workspace/apps/jsp-portlet | | Maven | ./maven/apps/jsp-portlet |
| Build tool | Link to project's source code | | ---------- | ------------------------------------------------------------------------------- | | Gradle | ./gradle/apps/jsp-war-portlet | | Liferay Workspace | ./liferay-workspace/wars/jsp-war-portlet | | Maven | ./maven/apps/jsp-portlet |
Template project description: Demonstrates how to use the raw OSGI APIs for registering a Liferay MVC portlet.
| Build tool | Link to project's source code | | ---------- | ------------------------------------------------------------------------------- | | Gradle | ./gradle/apps/osgi-portlet | | Liferay Workspace | ./liferay-workspace/apps/osgi-portlet | | Maven | ./maven/apps/osgi-portlet |
| Build tool | Link to project's source code | | ---------- | ------------------------------------------------------------------------------- | | Gradle | ./gradle/apps/render-command-portlet | | Liferay Workspace | ./liferay-workspace/apps/render-command-portlet | | Maven | ./maven/apps/render-command-portlet |
| Build tool | Link to project's source code | | ---------- | ------------------------------------------------------------------------------- | | Gradle | ./gradle/apps/resource-command-portlet | | Liferay Workspace | ./liferay-workspace/apps/resource-command-portlet | | Maven | ./maven/apps/resource-command-portlet
Extension point description: Lets developers create custom JAX-RS standard based RESTful services.
Template project description: Demonstrates how to create a JAX-RS service that lists Liferay users.
NOTE: Before this service is accessible, the developer needs to configure endpoints for it. To do so, go to the Control Panel → System → System Settings → Foundation and then
/rest-test).
rest) providing context paths (e.g.,
/rest-test) and
jaxrs.applications.filtersset to
(jaxrs.application=true).
Then you can access the service via http://localhost:8080/o/rest-test/blade.users/list/.
| Build tool | Link to project's source code | | ---------- | ------------------------------------------------------------------------------- | | Gradle | ./gradle/apps/rest | | Liferay Workspace | ./liferay-workspace/apps/rest | | Maven | ./maven/apps/rest |
| Build tool | Link to project's source code | | ---------- | ------------------------------------------------------------------------------- | | Gradle | ./gradle/apps/sample-verifier | | Liferay Workspace | ./liferay-workspace/apps/sample-verifier | | Maven | ./maven/apps/sample-verifier |
Refer to this sample's Readme for more information.
| Build tool | Link to project's source code | | ---------- | ------------------------------------------------------------------------------- | | Gradle | ./gradle/apps/service-builder/adq | | Liferay Workspace | ./liferay-workspace/apps/service-builder/adq | | Maven | ./maven/apps/service-builder/adq |
Template project description: Demonstrates how to create a Service Builder project separated into three bundles:
apibundle is for interfaces
servicebundle is for implementations
webbundle is a portlet calling the generated services
| Build tool | Link to project's source code | | ---------- | ------------------------------------------------------------------------------- | | Gradle | ./gradle/apps/service-builder/basic | | Liferay Workspace | ./liferay-workspace/apps/service-builder/basic | | Maven | ./maven/apps/service-builder/basic |
Refer to this sample's Readme for more information.
| Build tool | Link to project's source code | | ---------- | ------------------------------------------------------------------------------- | | Gradle | ./gradle/apps/service-builder/jdbc | | Liferay Workspace | ./liferay-workspace/apps/service-builder/jdbc | | Maven | ./maven/apps/service-builder/jdbc |
Refer to this sample's Readme for more information.
| Build tool | Link to project's source code | | ---------- | ------------------------------------------------------------------------------- | | Gradle | ./gradle/apps/service-builder/jndi | | Liferay Workspace | ./liferay-workspace/apps/service-builder/jndi | | Maven | ./maven/apps/service-builder/jndi |
Refer to this sample's Readme for more information.
| Build tool | Link to project's source code | | ---------- | ------------------------------------------------------------------------------- | | Gradle | ./gradle/apps/shared-language-keys | | Liferay Workspace | ./liferay-workspace/apps/shared-language-keys | | Maven | ./maven/apps/shared-language-keys |
Refer to this sample's Readme for more information.
| Build tool | Link to project's source code | | ---------- | ------------------------------------------------------------------------------- | | Gradle | ./gradle/apps/simulation-panel-app | | Liferay Workspace | ./liferay-workspace/apps/simulation-panel-app | | Maven | ./maven/apps/simulation-panel-app |
Refer to this sample's Readme for more information.
| Build tool | Link to project's source code | | ---------- | ------------------------------------------------------------------------------- | | Gradle | ./gradle/apps/springmvc-portlet | | Liferay Workspace | ./liferay-workspace/wars/springmvc-portlet | | Maven | ./maven/apps/springmvc-portlet |
Refer to this sample's Readme for more information.
| Build tool | Link to project's source code | | ---------- | ------------------------------------------------------------------------------- | | Gradle | ./gradle/ext/login-web-ext | | Liferay Workspace | ./liferay-workspace/ext/login-web-ext |
Template project description: Demonstrates a hook for
auth.failureand
auth.max.failures.
| Build tool | Link to project's source code | | ---------- | ------------------------------------------------------------------------------- | | Gradle | ./gradle/extensions/auth-failure | | Liferay Workspace | ./liferay-workspace/extensions/auth-failure | | Maven | ./maven/extensions/auth-failure |
Template project description: Uses Apache Shiro for hooking
auth.pipeline.pre.
| Build tool | Link to project's source code | | ---------- | ------------------------------------------------------------------------------- | | Gradle | ./gradle/extensions/authenticator-shiro | | Liferay Workspace | ./liferay-workspace/extensions/authenticator-shiro | | Maven | ./maven/extensions/authenticator-shiro |
Template project description: Demonstrates the
AutoLoginintegration point.
| Build tool | Link to project's source code | | ---------- | ------------------------------------------------------------------------------- | | Gradle | ./gradle/extensions/auto-login | | Liferay Workspace | ./liferay-workspace/extensions/auto-login | | Maven | ./maven/extensions/auto-login |
Refer to this sample's Readme for more information.
| Build tool | Link to project's source code | | ---------- | ------------------------------------------------------------------------------- | | Gradle | ./gradle/extensions/control-menu-entry | | Liferay Workspace | ./liferay-workspace/extensions/control-menu-entry | | Maven | ./maven/extensions/control-menu-entry |
| Build tool | Link to project's source code | | ---------- | ------------------------------------------------------------------------------- | | Gradle | ./gradle/extensions/doclib-resource-command-override | | Liferay Workspace | ./liferay-workspace/extensions/doclib-resource-command-override | | Maven | ./maven/extensions/doclib-resource-command-override |
Refer to this sample's Readme for more information.
| Build tool | Link to project's source code | | ---------- | ------------------------------------------------------------------------------- | | Gradle | ./gradle/extensions/document-action | | Liferay Workspace | ./liferay-workspace/extensions/document-action | | Maven | ./maven/extensions/document-action |
Extension point description: Lets a developer provide (or overwrite) friendly URL mapping for portlets.
Template project description: Demonstrates how to create a
FriendlyURLMapperfor the standard
NetworkUtilitiesportlet.
The
NetworkUtilitiesportlet does not provide friendly URLs out of the box. To test this plugin, put a
NetworkUtilitiesportlet on the home page. After deploying this plugin, you can access its tabs directly using the following URLs:
| Build tool | Link to project's source code | | ---------- | ------------------------------------------------------------------------------- | | Gradle | ./gradle/extensions/friendly-url | | Liferay Workspace | ./liferay-workspace/extensions/friendly-url | | Maven | ./maven/extensions/friendly-url |
Refer to this sample's Readme for more information.
| Build tool | Link to project's source code | | ---------- | ------------------------------------------------------------------------------- | | Gradle | ./gradle/extensions/gogo | | Liferay Workspace | ./liferay-workspace/extensions/gogo | | Maven | ./maven/extensions/gogo |
Refer to this sample's Readme for more information.
| Build tool | Link to project's source code | | ---------- | ------------------------------------------------------------------------------- | | Gradle | ./gradle/extensions/index-settings-contributor | | Liferay Workspace | ./liferay-workspace/extensions/index-settings-contributor | | Maven | ./maven/extensions/index-settings-contributor |
Refer to this sample's Readme for more information.
| Build tool | Link to project's source code | | ---------- | ------------------------------------------------------------------------------- | | Gradle | ./gradle/extensions/indexer-post-processor | | Liferay Workspace | ./liferay-workspace/extensions/indexer-post-processor | | Maven | ./maven/extensions/indexer-post-processor |
Extension point description: Demonstrates how to implement a Liferay
com.liferay.portal.kernel.events.LifecycleAction. This API replaces all the legacy lifecycle events such as
com.liferay.portal.kernel.events.Action,
com.liferay.portal.kernel.events.SessionAction, and
com.liferay.portal.kernel.events.SimpleAction. Connecting a
LifecycleActionto a particular event is determined by the OSGi service property
key. The following keys are supported:
application.shutdown.events- fired during destruction of company instances at portal shutdown.
application.startup.events- fired during initialization of company instances at portal start, or when a new instance is created.
global.shutdown.events- fired during destruction of the portal's main servlet.
global.startup.events- fire during initialization of the portal's main servlet.
layout.configuration.action.delete- fired during destruction of a page (Layout).
layout.configuration.action.update- fired during initialization of a page (Layout).
login.events.post- fired immediately following login.
login.events.pre- fired immediately prior to login.
logout.events.post- fired immediately following logout.
logout.events.pre- fired immediately prior to logout.
servlet.service.events.post- fired following requests to the portal (including all portlet container requests).
servlet.service.events.pre- fired prior to requests to the portal (including all portlet container requests & post login).
servlet.session.create.events- fired during creation of a portal's HTTP session.
servlet.session.destroy.events- fired during destruction of a portal's HTTP session.
Template project description: Demonstrates a hook for
login.events.pre.
| Build tool | Link to project's source code | | ---------- | ------------------------------------------------------------------------------- | | Gradle | ./gradle/extensions/lifecycle-login-preaction | | Liferay Workspace | ./liferay-workspace/extensions/lifecycle-login-preaction | | Maven | ./maven/extensions/lifecycle-login-preaction |
Refer to this sample's Readme for more information.
| Build tool | Link to project's source code | | ---------- | ------------------------------------------------------------------------------- | | Gradle | ./gradle/extensions/model-listener | | Liferay Workspace | ./liferay-workspace/extensions/model-listener | | Maven | ./maven/extensions/model-listener |
Template project description: Demonstrates how to make a hook for a
PollerProcessor.
| Build tool | Link to project's source code | | ---------- | ------------------------------------------------------------------------------- | | Gradle | ./gradle/extensions/poll-processor | | Liferay Workspace | ./liferay-workspace/extensions/poll-processor | | Maven | ./maven/extensions/poll-processor |
| Build tool | Link to project's source code | | ---------- | ------------------------------------------------------------------------------- | | Gradle | ./gradle/extensions/portlet-configuration-icon | | Liferay Workspace | ./liferay-workspace/extensions/portlet-configuration-icon | | Maven | ./maven/extensions/portlet-configuration-icon |
| Build tool | Link to project's source code | | ---------- | ------------------------------------------------------------------------------- | | Gradle | ./gradle/extensions/portlet-toolbar-contributor | | Liferay Workspace | ./liferay-workspace/extensions/portlet-toolbar-contributor | | Maven | ./maven/extensions/portlet-toolbar-contributor |
| Build tool | Link to project's source code | | ---------- | ------------------------------------------------------------------------------- | | Gradle | ./gradle/extensions/resource-bundle | | Liferay Workspace | ./liferay-workspace/extensions/resource-bundle | | Maven | ./maven/extensions/resource-bundle |
Refer to this sample's Readme for more information.
| Build tool | Link to project's source code | | ---------- | ------------------------------------------------------------------------------- | | Gradle | ./gradle/extensions/screen-name-validator | | Liferay Workspace | ./liferay-workspace/extensions/screen-name-validator | | Maven | ./maven/extensions/screen-name-validator |
Refer to this sample's Readme for more information.
| Build tool | Link to project's source code | | ---------- | ------------------------------------------------------------------------------- | | Gradle | ./gradle/extensions/search-keyword-query-contributor | | Liferay Workspace | ./liferay-workspace/extensions/search-keyword-query-contributor | | Maven | ./maven/extensions/search-keyword-query-contributor |
Refer to this sample's Readme for more information.
| Build tool | Link to project's source code | | ---------- | ------------------------------------------------------------------------------- | | Gradle | ./gradle/extensions/search-model-pre-filter-contributor | | Liferay Workspace | ./liferay-workspace/extensions/search-model-pre-filter-contributor | | Maven | ./maven/extensions/search-model-pre-filter-contributor
Refer to this sample's Readme for more information.
| Build tool | Link to project's source code | | ---------- | ------------------------------------------------------------------------------- | | Gradle | ./gradle/extensions/servlet | | Liferay Workspace | ./liferay-workspace/extensions/servlet | | Maven | ./maven/extensions/servlet |
Template project description: Demonstrates how to wrap the
UserLocalServicewith custom a
UserLocalServiceWrapper.
| Build tool | Link to project's source code | | ---------- | ------------------------------------------------------------------------------- | | Gradle | ./gradle/extensions/user-service-wrapper | | Liferay Workspace | ./liferay-workspace/user-service-wrapper | | Maven | ./maven/user-service-wrapper |
Refer to this sample's Readme for more information.
| Build tool | Link to project's source code | | ---------- | ------------------------------------------------------------------------------- | | Gradle | ./gradle/overrides/module-jsp-override | | Liferay Workspace | ./liferay-workspace/overrides/module-jsp-override | | Maven | ./maven/overrides/module-jsp-override |
| Build tool | Link to project's source code | | ---------- | ------------------------------------------------------------------------------- | | Gradle | ./gradle/overrides/portlet-form-taglib-override | | Liferay Workspace | ./liferay-workspace/overrides/portlet-form-taglib-override | | Maven | ./maven/overrides/portlet-form-taglib-override |
Refer to this sample's Readme for more information.
| Build tool | Link to project's source code | | ---------- | ------------------------------------------------------------------------------- | | Gradle | ./gradle/themes/simple-theme | | Liferay Workspace | ./liferay-workspace/wars/simple-theme | | Maven | ./maven/themes/simple-theme |
Refer to this sample's Readme for more information.
| Build tool | Link to project's source code | | ---------- | ------------------------------------------------------------------------------- | | Gradle | ./gradle/themes/template-context-contributor | | Liferay Workspace | ./liferay-workspace/themes/template-context-contributor | | Maven | ./maven/themes/template-context-contributor |
Refer to this sample's Readme for more information.
| Build tool | Link to project's source code | | ---------- | ------------------------------------------------------------------------------- | | Gradle | ./gradle/themes/theme-contributor | | Liferay Workspace | ./liferay-workspace/themes/theme-contributor | | Maven | ./maven/themes/theme-contributor |
This project does not yet have template projects for the following extension points. We encourage you to contribute some!