Weblogic 12c - Mapstruct - 1.0.0.Final - ClassNotFoundException:无法找到实现

时间:2016-04-07 10:23:03

标签: java weblogic12c mapstruct

我一直在使用mapstruct一段时间,但在尝试部署我的一个网络服务时发现了这个问题:

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中,我按照官方doc中的说明进行了设置。

我已经阅读了@ gunnar的回答here,但在我的情况下,实现是在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,即使该类在接口旁边。

1 个答案:

答案 0 :(得分:1)

您是否可以尝试创建Mappers类的副本,并使用clazz.getClassLoader()作为impl类的加载器?这应该可以解决问题。你能告诉我这是否有效吗?如果是这样,我们将在下一个版本中进行更改。谢谢!