Всякий раз, когда подкласс явно не может быть приведен к его законному суперклассу, у вас есть дублирующиеся классы, загруженные разными загрузчиками классов.Найдите, куда вы загружаете классы активации (суперкласса), удалите все, кроме одного (как правило, вам нужно исключить один класс, который приносит ваш собственный проект) и используйте предоставленный класс из фреймворка.
В сообщении об исключении указаны названные классы, но в нем отсутствуют загрузчики классов, участвующие в игре, поэтому сообщение, с первой попытки понять его, не имеет особого смысла.Как только вы узнаете о нескольких загрузчиках классов, например, о нескольких экземплярах javax.activation.DataContentHandler
, это станет более логичным.
Редактирование: С помощью операторов compileInclude
в вашем build.gradle вы эффективно объединяете все свои зависимостив свой собственный файл JAR.Но у фреймворка есть собственная версия этих классов, и, хотя все они имеют одно и то же имя, теперь они будут разными (не только числовыми) версиями, загруженными через разные загрузчики классов.Вы должны использовать compileInclude
только в том случае, если вы явно зависите от чего-то, чего вы никогда не найдете во время выполнения OSGi.Вместо этого используйте compileOnly
или compile
по умолчанию и разверните дополнительные зависимости во время выполнения вместе с вашим модулем.
Проверьте эту статью для подробного описания того, что вы 'мы сделали.