null

Liferay 6.1 service builder при помощи maven

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>