Нерешенное требование: Импорт-пакет: 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 ответа
Вы сами нашли сложное решение, есть два более простых способа:
Используйте целевую платформу. Предполагая, что вы используете Liferay Workspace, ваш gradle.properties в корне вашего рабочего пространства имеет запись
liferay.workspace.target.platform.version
. Установите это на7.3.5
и версии будут взяты автоматическиДаже необходимые модули будут обнаружены автоматически, установив целевую платформу, и объявить свою зависимость как
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.
Удачи!