しばらくの間 mapstruct を使用していますが、Web サービスの 1 つをデプロイしようとしているときに次の問題が見つかりました。
Target state: deploy failed on Server my_server
java.lang.ClassNotFoundException: Cannot find implementation for bar.foo.mapper.MyMapper
at weblogic.deploy.api.tools.deployer.Jsr88Operation.report(Jsr88Operation.java:547)
at weblogic.deploy.api.tools.deployer.Deployer.perform(Deployer.java:140)
at weblogic.deploy.api.tools.deployer.Deployer.runBody(Deployer.java:88)
at weblogic.utils.compiler.Tool.run(Tool.java:158)
at weblogic.utils.compiler.Tool.run(Tool.java:115)
at weblogic.Deployer.run(Deployer.java:74)
... 15 more
展開されている WAR を確認すると、同じ bar.foo.mapper フォルダーに MyMapper.class と MyMapperImpl.class があり、正常に動作する他のサービスと同様です。
POM では、公式ドキュメントに記載されているセットアップに従いました。
私はすでに @gunnar の回答をここで読んでいますが、私の場合、実装は WAR のインターフェイスの横にあります。
何か案は?
ありがとう!
更新: バージョン 1.1.0.Beta1 で試してみたところ、同じ結果が得られました
UPDATE-2 : これは、スローされた例外のログです。
Caused By: java.lang.ClassNotFoundException: Cannot find implementation for bar.foo.mapper.MyMapper
at org.mapstruct.factory.Mappers.getMapper(Mappers.java:94)
デバッグ中に、ここで例外がスローされます。
T mapper = (T) classLoader.loadClass( clazz.getName() + IMPLEMENTATION_SUFFIX ).newInstance();
...クラスがインターフェースの横にあるにもかかわらず、classLoader.loadClassがbar.foo.mapper.MyMapperImplを見つけられないためです。