Нерешенное требование: Импорт-пакет: 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]

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

2 ответа

Решение

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

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

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

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

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

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

Чтобы исправить это, я зашел в файл 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.

Удачи!

Другие вопросы по тегам