Я использую Equinox Transforms, чтобы заменить один класс своей пользовательской версией в пути к классам. Кажется, что механизм преобразования работает правильно, и я возвращаю InputStream
пользовательского класса от public InputStream getInputStream(InputStream inputStream, URL transformerUrl)
моего класса трансформатора.Замена класса другим с помощью Eclipse Transforms: не удается исправить ClassFormatError
Но при загрузке этого класса в результате получается ClassFormatError
с сообщением Truncated class file
. Единственное, что я могу себе представить, это несоответствие между версиями Java, но я сделал все, что я знаю, как сделать, чтобы устранить это как источник проблемы, но безуспешно.
Я удалил все, кроме одного JDK из Eclipse, в настройке установленных JRE. Я убедился, что все подключаемые модули имеют одну и ту же версию Java для среды исполнения, а JRE в пути сборки задана с той же средой выполнения. Цели и среды выполнения продукта определены одинаково. Я сделал clean all
в рабочей области и повторно запустил eclipse и мое рабочее место во время выполнения много раз, с -clean
. В конце концов, я все еще получаю ошибку.
Что еще может быть, если не версии Java, вызывающие эту ошибку? На странице Equinox Transforms говорится, что он может использоваться для преобразования ресурсов класса. Кто-нибудь на самом деле это сделал?
Последняя фиксация этого проекта - 2013 год, кажется, заброшен .. –
Да, я это заметил. Но он был задокументирован как работающий. Возможно, что-то я не понимаю о загрузке классов, потому что код равноденствия, похоже, делает то, что он должен. – MidnightJava
Вы должны попробовать «стандартный» способ переопределения классов в osgi: weavinghook https://osgi.org/javadoc/r6/core/org/osgi/framework/hooks/weaving/WeavingHook.html –