Liferay service builder - довольно неплохое решение для уровня хранения в приложениях небольшого масштаба. Рассмотрим, как его можно использовать в портлетах, разработанных при помощи maven.
Описание процесса настройки окружения и создания простого портлета можно найти в моем предудыщем посте. Действия по настройке окружения, необходимые для создания портлета, использующего service builder, точно такие же, как приведенные там. Но начиная со второго шага, после выполения команды
mvn archetype:generate
из списка шаблонов нужно выбрать:
...
55: remote -> com.liferay.maven.archetypes:liferay-servicebuilder-archetype
(Provides an archetype to create Liferay Service Builder portlets.)
...
Далее создание идет аналогичным образом.
Сборка сервисов выполняется командой
mvn liferay:build-service
Но в Liferay версии 6.1 есть проблема с зависимостями sfl4j, поэтому билд завершится ошибкой:
[INFO] BUILD FAILURE
...
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal com.liferay.maven.plugins:liferay-maven-plugin:6.1.0:build-service (default-cli) on project myliferay-portlet: Execution default-cli of goal com.liferay.maven.plugins:liferay-maven-plugin:6.1.0:build-service failed: An API incompatibility was encountered while executing com.liferay.maven.plugins:liferay-maven-plugin:6.1.0:build-service: java.lang.AbstractMethodError:
com.liferay.util.sl4fj.LiferayLoggerAdapter.log(Lorg/slf4j/Marker;Ljava/lang/String;ILjava/lang/String;Ljav/lang/Throwable;)V
[ERROR] -----------------------------------------------------
[ERROR] realm = plugin>com.liferay.maven.plugins:liferay-maven-plugin:6.1.0
[ERROR] strategy = org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy
[ERROR] urls[0] = file:/...../maven_repo/com/liferay/maven/plugins/liferay-maven-plugin/6.1.0/liferay-maven-plugin-6.1.0.jar
[ERROR] urls[1] = file:/...../maven_repo/com/liferay/portal/portal-impl/6.1.0/portal-impl-6.1.0.jar
Для того, чтобы портлет билдился успешно, нужно добавить следующее исключение в pom.xml портлета:
<plugin>
<groupId>com.liferay.maven.plugins</groupId>
<artifactId>liferay-maven-plugin</artifactId>
<version>${liferay.version}</version>
<dependencies>
<dependency>
<groupId>org.apache.jackrabbit</groupId>
<artifactId>jackrabbit-core</artifactId>
<version>2.1.2</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<configuration>
<apiDir>${plugin.api.directory}</apiDir>
<pluginType>portlet</pluginType>
</configuration>
</plugin>