Я использую mapstruct на некоторое время теперь, но нашел эту проблему при попытке развернуть одну из моих веб-сервисов:Weblogic 12с - Mapstruct - 1.0.0.Final - ClassNotFoundException: Не удается найти реализация
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.
Любые идеи?
Спасибо!
UPDATE: Я просто попытался с версии 1.1.0.Beta1 с теми же результатами
ДОПОЛНЕНО-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();
... потому что классLoader.loadClass не плавает d bar.foo.mapper.MyMapperImpl, хотя класс находится рядом с интерфейсом.
Это сделало это! Я изменил 'Thread.currentThread(). GetContextClassLoader()' (привилегированное действие) с 'clazz.getClassLoader()' –