問題
- DXP 7.2 のサービスビルダーを DXP 7.4 2023 Q4.0 にアップグレード中にClassNotFoundException エラーが発生しました。
- エラーは次のようになる:
2024-01-18 09:31:22.491 ERROR [Refresh Thread: Equinox Container: 7c691475-51d0-4491-a1a2-40bee687e2d2][ModuleApplicationContextExtender:72] null
java.lang.ClassNotFoundException: com.liferay.portal.kernel.service.PersistedModelLocalServiceRegistry cannot be found by com.mchi.master.service.service_1.0.0
環境
- Liferay DXP 7.4 2023年第4四半期
解像度
以下はその手順である:
-
- に基づいて、"PersistedModelLocalServiceRegistry " の代わりに"ServiceTrackerMap "クラスを使用してください。 LPS-199563.
- Liferay Developer Studio (LDS)には四半期リリース用のタグがまだ追加されていませんので、製品バージョンのドロップダウンから'dxp-7.4-u102'を選択してください。
- ServiceTrackerMapは、サービスを追跡するために使用されるが、サービスの登録には使用されない。 ServiceTrackerMapは、基本的にはServiceTrackerと同じですが、ServiceTrackerMapでは、プロパティに基づいてサービスを分類できる点が異なります。
- 具体的な使用例としては、ServiceTrackerMapについて知る必要すらありません。 https://github.com/liferay/liferay-portal/blob/eb207a1de06962b270c82900e178f3d6b5ef5dcf/portal-impl/src/com/liferay/portal/service/PersistedModelLocalServiceRegistryUtil.javaユーザが特定の model.class.name に基づいてサービスを取得したい場合は、次のように実行するだけです:「PersistedModelLocalServiceRegistryUtil.getPersistedModelLocalService(modelClassName);" を実行するだけです。
-
ユーザが新しい PersistedModelLocalService を登録したい場合、@Component を定義するか、あるいは以下のようにサービスの登録をインライン化することができます:
_serviceRegistration = bundleContext.registerService(
PersistedModelLocalService.class,
customServiceObject,
MapUtil.singletonDictionary("model.class.name", CustomService.class.getName()));
-
6. Implに関するエラーが発生した場合は、settings.gradle
9. ユーザーが試しているバージョンでエラーが発生した場合は、src/main/javaファイルを削除してサービスをリフレッシュし、ビルドが成功するまで異なるバージョンで再試行することができる。
7のcom.liferay.gradle.plugins.workspaceのバージョンを9.0.4に変更してください。 モジュールからsrc/main/javaディレクトリを削除し、Gradleをリフレッシュします。
8. settings.gradleで、依存関係のクラスパスのバージョンを "9.1.1 "に変更する:「classpath(group:"com.liferay", name: "com.liferay.gradle.plugins.workspace", version:"9.1.1")".