我已经使用 mapstruct 一段时间了,但是在尝试部署我的一个 web 服务时发现了这个问题:
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,即使该类位于接口旁边。