Liferay Portal 7.4 GA9 and Liferay Commerce 4.0 GA9 Release

We are pleased to announce the release of Liferay Portal 7.4 GA9 and Liferay Commerce 4.0 GA9!


Download options

Liferay Portal and Liferay Commerce share the same Bundle and Docker image.  To get started using either Liferay Portal or Liferay Commerce, choose the best download option suited for your environment below.

Docker image

To use Liferay Portal 7.4 GA9:

docker run -it -p 8080:8080 liferay/portal:

For more information on using the official Liferay docker image see the liferay/portal repo on Docker Hub.

Bundles and other download options

If you are used to binary releases, you can find the Liferay Portal 7.4 GA9 and Liferay Commerce 4.0 GA9 release on the download page.  If you need additional files (for example, the source code, or dependency libraries), visit the release page.

Dependency Management

For development using the Liferay Platform, update Liferay Workspace to use the  latest dependencies, by adding the following line to the build.gradle file:

dependencies {
	compileOnly group: "com.liferay.portal", name: "release.portal.api"

All portal dependencies are now defined with a single declaration. When using an IDE such as Eclipse or IntelliJ all apis are immediately available in autocomplete for immediate use.  

By setting a product info key property it will be possible to update all dependencies to a new version by updating the liferay.workspace.product property in the liferay workspace projects file:

liferay.workspace.product = portal-7.4-ga9

When using an IDE such as Eclipse or IntelliJ all apis are immediately available in autocomplete for immediate use.



Allowing submitters to see partial results

Admins can now allow users filling the form to check the partial results from the form answers. Mainly for use cases of polls and surveys so users can follow up the results before the admins share the final ones.

Allowing one submission per user

Form creators can limit the number of forms the user can submit to one. A critical capability for polls and surveys to avoid users answering multiple times and compromising the results.


Long texts in my objects

Users now can model their objects and request from their users long texts up to 65,000 characters, versus 280 from string (text fields).

Import and Export specific objects structures

Users now will have an easy way to safely test their Objects somewhere before publishing them their production environments.

Experience Building

Widgets and Fragments renaming to ensure intended use is clear

When using the different widgets and fragments for navigation it was not clear what they could be used for.

The goal of this story is to rename these widgets and fragments so their function is clear.

  • "Categories Navigation" has been renamed to "Category Filter"

  • "Tag Navigation" has been renamed to "Tag Filter"

  • "Menu Display" has been renamed to "Menu Display Fragment"

  • "Navigation Menu" has been renamed to "Menu Display Widget"


All documentation for Liferay Portal and Liferay Commerce can now be found on our documentation site:  For more information on upgrading to Liferay Portal 7.4 GA9 see refer to the Upgrade Overview.

Compatibility Matrix

Liferay's general policy is to test Liferay Portal and Liferay Commerce  against newer major releases of operating systems, open source app servers, browsers, and open source databases (we regularly update the bundled upstream libraries to fix bugs or take advantage of new features in the open source we depend on). 

Liferay Portal 7.4 GA9 and Liferay Commerce 4.0 GA9 were tested extensively for use with the following Application/Database Servers: 

Application Server

  • Tomcat 9.0

  • Wildfly 17.0


  • HSQLDB 2 (only for demonstration, development, and testing)

  • MySQL 5.7, 8.0

  • MariaDB 10.2, 10.4

  • PostgreSQL 12.x, 13.x


  • IBM J9 JDK 8

  • Oracle JDK 8

  • Oracle JDK 11

  • All Java Technical Compatibility Kit (TCK) compliant builds of Java 11 and Java 8

Search Engine Compatibility Matrix

Source Code

Source is available as a zip archive on the release page, or on its home on GitHub. If you're interested in contributing, take a look at our contribution page.

Bug Reporting

If you believe you have encountered a bug in the new release you can report your issue by following the bug reporting instructions.

Getting Support

Support is provided by our awesome community. Please visit helping a developer page for more details on how you can receive support.

Fixes and Known Issues


In order to keep up with the pace of release, I wrote this shell for one click docker deployment, hoping to help the group.

HostIp= DockerIp= LRVersion=7439 ImageVersion= BasePath=lr-$LRVersion DBUser=root DBPwd=2Xib6X5MFJ483r5E ESIp=your-elastic-search-ip

DATABASE="lportal"$(date +%y%m%d%H%M) mysql -u$DBUser -p$DBPwd << EOF CREATE DATABASE $DATABASE character set utf8; use mysql; create user "$DATABASE"@"$DockerIp" identified by "$DATABASE@7982"; #mysql8.0 GRANT ALL PRIVILEGES ON $DATABASE.* TO $DATABASE@$DockerIp; # GRANT ALL PRIVILEGES ON *.* TO $DBUser@$DockerIp IDENTIFIED BY $DBPwd WITH GRANT OPTION; flush privileges; EOF mkdir -p $BasePath/{files,scripts,deploy} mkdir -p $BasePath/files/osgi/configs mkdir -p $BasePath/files/tomcat/webapps/ROOT/WEB-INF/classes

cd $BasePath/files/ touch cat <<EOF >       web.server.http.port=80       web.server.https.port=443       web.server.protocol=https       jdbc.default.driverClassName=com.mysql.cj.jdbc.Driver       jdbc.default.url=jdbc:mysql://$HostIp/$DATABASE?characterEncoding=UTF-8&dontTrackOpenResources=true&holdResultsOpenOverStatementClose=true&serverTimezone=GMT&useFastDateParsing=false&useUnicode=true       jdbc.default.username=$DATABASE       jdbc.default.password=$DATABASE@7982       layout.user.public.layouts.power.user.required=true       layout.user.private.layouts.power.user.required=true       session.timeout=5 EOF cat <<EOT >> osgi/configs/

operationMode="REMOTE" productionModeEnabled=B"true" networkHostAddresses="http://$ESIp:9200" EOT cat <<EOT >> tomcat/webapps/ROOT/WEB-INF/classes/ EOT cd /root docker run -it -p 8080:8080 -p 11311:11311 -v $(pwd)/lr-$LRVersion:/mnt/liferay liferay/portal:$ImageVersion

It seams that the api's has stopped searching inside content.

I can only get results when search keys that appear in title or other system fields.

If i have my own structure with my own fields, and try to call this api looking for some work it returns a blank list.

This has worked ok until Liferay 7.3 at least, only stopped working now.

List<JournalArticle> projectList =, groupId, Collections.emptyList(),0, mykeywordsearch, null, ddmStructureKey, null, null, null, null, WorkflowConstants.STATUS_APPROVED, QueryUtil.ALL_POS, QueryUtil.ALL_POS, null);

It is a bug or a depprecation?

If i try to call the headless api with same data in que keyword field it return results.

I noticed also a strange behaviour, when i create a new structure, sometimes the search works, but it is completely random.

Sometimes it works on the second field, sometime in the last but never in the first

A simple test is to create a structure with only 2 text fields (Name and Email for example), I also tried specifying it as searchable keyword or Text.

If you run the query I put before, It can search data on the second field with searchable type text or keyword but in the first one it always return an empty list.