Создание вручную развертываемого JAR для Liferay - PullRequest
0 голосов
/ 18 мая 2018

Я создал рабочую область liferay в формате gradle, и она в основном содержит только тему и модуль TemplateContextContributor.

Теперь я хочу создать оболочку maven вокруг обоих артефактов, чтобы сделать их совместимыми с некоторыми другимиmaven-process / -plugins при сохранении оригинальной структуры gradle.Я не хочу использовать liferay-maven-plugin или maven-tools для создания этих артефактов, потому что кажется, что они ведут себя иначе, чем набор инструментов gradle / gulp, когда речь идет, например, о компиляции scss.

Итак, я создалнекоторые POM с нуля для

  1. Theme
  2. TemplateContextContributor-Module

Прежде всего я расскажу о механизме для темы, которыйуже работает:

Эта оболочка использует плагин maven-war для объединения содержимого папки build /, в которой находится ранее созданный артефакт gradle, в WAR-файл, который может быть развернут с помощьюLiferay без проблем.

theme pom.xml:

<properties>
    <src.dir>src</src.dir>
    <com.liferay.portal.tools.theme.builder.outputDir>build</com.liferay.portal.tools.theme.builder.outputDir>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

[...]

<plugin>
    <artifactId>maven-war-plugin</artifactId>
    <version>3.0.0</version>
    <configuration>
        <webResources>
            <resource>
                <directory>${com.liferay.portal.tools.theme.builder.outputDir}</directory>
                <excludes>
                    <exclude>**/*.sass-cache/</exclude>
                </excludes>
            </resource>
        </webResources>
    </configuration>
</plugin>

Однако у меня возникают трудности при создании JAR-файла, совместимого с OSGI, для содержимого модуля.Кажется, что только META-INF / MANIFEST.MF не содержит нужной информации, и я, по-видимому, не могу сгенерировать ее так, как Liferay (или OSGI) понимает.

это модуль pom.xml-зависимости и плагины, которые я пробовал:

<dependency>
    <groupId>org.apache.felix</groupId>
    <artifactId>org.apache.felix.scr.ds-annotations</artifactId>
    <version>1.2.10</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>com.liferay</groupId>
    <artifactId>com.liferay.gradle.plugins</artifactId>
    <version>3.9.9</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>com.liferay.portal</groupId>
    <artifactId>com.liferay.portal.kernel</artifactId>
    <version>2.0.0</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>org.osgi</groupId>
    <artifactId>org.osgi.service.component.annotations</artifactId>
    <version>1.3.0</version>
    <scope>provided</scope>
</dependency>

[...]

<plugin>
    <groupId>biz.aQute.bnd</groupId>
    <artifactId>bnd-maven-plugin</artifactId>
    <version>3.3.0</version>
    <executions>
        <execution>
            <goals>
                <goal>bnd-process</goal>
            </goals>
        </execution>
    </executions>
    <dependencies>
        <dependency>
            <groupId>biz.aQute.bnd</groupId>
            <artifactId>biz.aQute.bndlib</artifactId>
            <version>3.2.0</version>
        </dependency>
        <dependency>
            <groupId>com.liferay</groupId>
            <artifactId>com.liferay.ant.bnd</artifactId>
            <version>2.0.48</version>
        </dependency>
    </dependencies>
</plugin>
<plugin>
    <groupId>org.apache.felix</groupId>
    <artifactId>maven-scr-plugin</artifactId>
    <version>1.25.0</version>
    <executions>
        <execution>
            <id>generate-scr-scrdescriptor</id>
            <goals>
                <goal>scr</goal>
            </goals>
        </execution>
    </executions>
</plugin>

Я смог создать JAR-файл, используя описанное выше, но его файл META-INF / MANIFEST.MF не идентичен тому, который был создан gradlebuild:

differences, left is the liferay manifest.mf

Я думаю, именно поэтому Liferay не развертывает его.В журнале написано «модуль обработки xxx ....», но это никогда не заканчивается, и модуль не работает в Liferay.

Это плагины, которые я пробовал в различных комбинациях:

  • maven-build-plugin
  • maven-scr-plugin
  • maven-jar-plugin
  • maven-war-plugin
  • maven-compiler-plugin

Любая помощь в создании JAR-модуля, развертываемого на уровне жизни, была бы полезна.

1 Ответ

0 голосов
/ 21 мая 2018

Я не уверен, почему вы вручную создаете оболочку maven для Template Context Contributor.Образцы Liferay (blade) доступны для рабочего пространства Liferay, чистого Gradle, а также для Maven.Я бы просто пошел со стандартным и не стал бы беспокоиться о повторном изобретении колеса.

Чтобы сделать этот ответ автономным: current pom.xml в спискев плагине Template Contributor есть:

<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>
    <artifactId>template-context-contributor</artifactId>
    <version>1.0.0</version>
    <packaging>jar</packaging>

    <parent>
        <groupId>blade</groupId>
        <artifactId>parent.bnd.bundle.plugin</artifactId>
        <version>1.0.0</version>
        <relativePath>../../parent.bnd.bundle.plugin</relativePath>
    </parent>

    <dependencies>
        <dependency>
            <groupId>com.liferay.portal</groupId>
            <artifactId>com.liferay.portal.kernel</artifactId>
            <version>2.0.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.portlet</groupId>
            <artifactId>portlet-api</artifactId>
            <version>2.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.0.1</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.osgi</groupId>
            <artifactId>org.osgi.service.component.annotations</artifactId>
            <version>1.3.0</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

    <build>
        <finalName>com.liferay.blade.template.context.contributor-${project.version}</finalName>
    </build>
</project>
...