Нерешенное требование: Import-Package: com.liferay.portal.kernel.portlet.bridges.mvc; версия=[2.0.0,3.0.0)

Я скачал Liferay 7.3.5 Community Edition и пытаюсь развернуть портлет HelloWorld для тестирования целей. Он связан с Tomcat. Я использую Liferay Developer Studio (тот же старый Eclipse на стероидах) для разработки и развертывания портлета. Версия 3.8.1.202004240132-ga2 Я также создал сервер, как в эта ссылка - сервер использует tomcat 9.0.37 из уже скачанного бандла.

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

Я решил добавить портлет/виджет на страницу виджета, которую я создал для этой цели, но не смог найти портлет: введите здесь описание изображения

Затем, войдя в систему с правами администратора, я перешел в Панель управления -> Диспетчер приложений и искал свой портлет. Он отображается как установленный, и я могу его активировать. После того, как я нажал «Активировать», журналы Eclipse начинают писать: ERROR [http-nio-8080-exec-8][PortletServlet:119] javax.portlet.PortletException: org.osgi.framework.BundleException: Could not resolve module: VictorTestPortlet [2716]_ Unresolved requirement: Import-Package: com.liferay.portal.kernel.portlet.bridges.mvc; version="[2.0.0,3.0.0)"_ [Sanitized]

введите здесь описание изображения

Вопрос: что вызывает эту ошибку?


person Victor    schedule 21.10.2020    source источник


Ответы (2)


Вы сами нашли сложное решение, есть два более простых способа:

  1. Используйте целевую платформу. Предполагая, что вы используете Liferay Workspace, ваш gradle.properties в корне вашего рабочего пространства имеет запись liferay.workspace.target.platform.version. Установите его на 7.3.5, и версии будут взяты автоматически.

  2. Пусть даже необходимые модули будут обнаружены автоматически, установив целевую платформу, и объявите свою зависимость как

    зависимости { группа compileOnly: com.liferay.portal, имя: release.portal.api}

Это даже определит точный модуль (из более чем 1000), от которого вам нужно зависеть. Конечно, это работает против всей концепции модульности (чтобы знать о ваших зависимостях), но это оооочень удобно.

person Olaf Kock    schedule 22.10.2020
comment
В случае Liferay знание версий зависимостей в основном сводится к вопросу, какие именно версии модулей развернуты на целевом сервере liferay? и это ОГРОМНАЯ задача по обновлению. Установка версии центральной целевой платформы отвечает на этот вопрос для всех модулей Liferay, от которых вы зависите. Итак, я бы не сказал, что это работает против концепции модульности — это просто ответ на один повторяющийся вопрос в одной строке. - person orithena; 04.11.2020
comment
Как я уже сказал: ооооочень удобно. Ценой исключения явных зависимостей (в случае 2). Вариант № 1 по-прежнему дает вам явные зависимости с автоматически определенным номером версии. Уже довольно хорошо, но менее удобно, если модуль, от которого вы зависите, меняет имена или разбит на несколько модулей. - person Olaf Kock; 04.11.2020

Проблема в том, как уже было сказано - зависимость не найдена.

Чтобы исправить это, я зашел в файл build.gradle, в котором отсутствует версия для зависимости com.liferay.portal. Итак, моя строка выглядела так:

compileOnly group: "com.liferay.portal", name: "com.liferay.portal.kernel"

А сейчас это выглядит так:

compileOnly group: "com.liferay.portal", name: "com.liferay.portal.kernel", version: "9.8.1"

Версия ДОЛЖНА совпадать с версией вашего экземпляра Liferay Server — вы можете найти ее, открыв portal-kernel.jar и просмотрев его файл MANIFEST.MF для версии ключа Bundle-Version. Баночка находится в папке ...portal-tomcat-7.3.5\tomcat-9.0.37\lib\ext.

Удачи !

person Victor    schedule 21.10.2020