Это команда clirr, которую можно запустить в бесплатном хостинг-провайдере OnWorks, используя одну из наших многочисленных бесплатных онлайн-рабочих станций, таких как Ubuntu Online, Fedora Online, онлайн-эмулятор Windows или онлайн-эмулятор MAC OS.
ПРОГРАММА:
ИМЯ
clirr - Проверить исходный код и двоичную совместимость библиотек Java
СИНТАКСИС
Clirr -o Oldjar -n новенький [кредита]
ОПИСАНИЕ
Clirr - это инструмент, который проверяет библиотеки Java на двоичную совместимость и совместимость исходного кода со старыми
выпускает. Обычно вы даете ему два набора файлов jar, а Clirr выводит список
изменения в публичном API.
ДОПОЛНИТЕЛЬНЫЕ ОПЦИИ
-a, --show-all-scopes
показать частные и пакетные классы
-f, --выходной файл
имя выходного файла
-i, --include-pkg
включать только классы из этого пакета и его подпакетов
-n, --новая версия
jar файлы новой версии
-ncp, --новый путь к классам
Путь к сторонним классам, на который ссылается новая версия
-o, --старая версия
jar файлы старой версии
-окп, --orig-класспуть
Путь к сторонним классам, на который ссылается старая версия
-p, --show-pkg-scope
показать классы области видимости пакета
-s, --стиль [текст | xml]
стиль вывода
СООБЩЕНИЯ
Когда clirr генерирует сообщение ERROR, WARNING или INFO об изменении в файлах jar.
По сравнению с ним существует связанный ссылочный код сообщения. Это руководство содержит
объяснение значения этого сообщения, которое может содержать информацию, которая не может
быть помещенным в краткое изложение сообщения.
Сообщения разделены на три уровня важности: ERROR, WARNING и INFO.
Ошибки бывают двух видов:
Сбои во время компоновки, когда исключение будет выброшено, как только код будет скомпилирован.
против старой версии класса, а новая версия класса загружается в
та же иерархия загрузчиков классов.
Сбои во время выполнения, когда возникает исключение, когда код скомпилирован по старому
версия класса пытается вызвать метод в новой версии класса, или наоборот
наоборот.
Clirr сообщает об «ошибках» в случаях, когда возможен сбой во время выполнения. Ли
что на самом деле происходит, может зависеть от способа вызова библиотеки, т. е. сообщаемых изменений
поскольку на самом деле ошибка может работать при использовании до тех пор, пока шаблоны использования библиотеки
не вызвать аварийную ситуацию.
Предупреждения выдаются в ситуациях, когда не возникает исключений связи или времени выполнения, но
где приложение может вести себя неожиданно из-за произошедших изменений.
Информационные сообщения предоставляют пользователям информацию о новых функциях, которые были
добавлен без нарушения обратной совместимости.
При использовании clirr для отчета об изменениях в элементах, имеющих частную или пакетную область видимости, эти
об изменениях всегда сообщается как об изменениях уровня ИНФОРМАЦИЯ, а не уровня ПРЕДУПРЕЖДЕНИЯ или ОШИБКИ. Этот
позволяет пользователям clirr создавать «отчеты об изменениях» на уровне, подходящем для разработчиков.
без того, чтобы некоторые из этих изменений были помечены (несущественно) как несовместимые двоичные файлы.
Никогда не может быть двоичной несовместимости для изменений частных классов, методов или
поля, поскольку этот доступ может происходить только из одного класса (то есть из той же компиляции
Ед. изм).
Clirr не сообщает ПРЕДУПРЕЖДЕНИЯ или ОШИБКИ несовместимости двоичных файлов для элементов в области пакета.
либо потому, что пакеты Java предназначены для «выпуска», т. е. все классы внутри
пакет компилируется вместе (обеспечивая совместимость), а затем выпускается как единое целое. Единственный
когда несовместимость пакетов может быть проблемой, когда пользователи
библиотека писать свои собственные классы, используя объявление пакета, принадлежащего некоторому внешнему
библиотека, или когда используется подмножество обновленных классов (например, один класс) из пакета
для переопределения определенных классов из предыдущего выпуска библиотеки. Обе эти
Ситуации считаются очень плохой практикой по соглашению о программировании Java.
В следующих разделах термин «старый» используется для обозначения класса, интерфейса, метода.
или поле из набора банок, которые представляют старую / предыдущую / исходную / базовую версию
проверяемой библиотеки. Термин «новый» используется для обозначения класса, интерфейса,
метод или поле из набора jar-файлов, которые представляют новую / текущую / последнюю версию
библиотека проверяется.
В следующих разделах термин "тип" используется для обозначения того, что может быть
либо класс, либо интерфейс.
1000 - Увеличенный видимость of класс
Степень серьезности: ИНФОРМАЦИЯ
Указанный тип существует в обеих версиях, но его объявленный спецификатор доступа имеет
изменено, чтобы ослабить ограничения на доступ к нему другого кода.
Типы верхнего уровня (то есть те, которые не вложены в другой класс) могут иметь только
«пакетная» или «общедоступная» доступность. Вложенные типы могут принимать любой из четырех
доступные значения доступности.
Независимо от того, является ли объект верхним или вложенным, изменение доступности
слева направо от последовательности private-> package-> protected-> public всегда
гарантирует, что весь код, который ранее мог получить доступ к этому типу, по-прежнему может получить доступ к этому
тип. Поэтому такое изменение всегда является двоичным и совместимым с исходным кодом.
Обратите внимание, что объявление "protected" обеспечивает доступ к обоим коду, полученному из
типа и кодирования в одном пакете, т.е. "защищенная" доступность также подразумевает
доступность пакета.
1001 - Снижение видимость of класс
Серьезность: ОШИБКА
Указанный тип существует в обеих версиях, но его объявленный спецификатор доступа имеет
изменено, чтобы ужесточить ограничения на доступ к нему другого кода.
Типы верхнего уровня (то есть те, которые не вложены в другой класс) могут иметь только
«пакетная» или «общедоступная» доступность. Вложенные типы могут принимать любой из четырех
доступные значения доступности.
Независимо от того, является ли тип верхнего уровня или вложенным, изменение доступности
слева направо последовательности public-> protected-> package-> private может вызвать
существующий код, который раньше мог получить доступ к типу, чтобы больше не иметь этого.
В разделе 13.4.3 Спецификации языка Java прямо указано, что
IllegalAccessError должен возникать, если уже существующий двоичный файл пытается получить доступ к типу
когда доступность типа была изменена на что-то, что могло бы вызвать
ошибка времени компиляции. Однако на практике это, по-видимому, не соблюдается, в
по крайней мере, в текущих JVM. Тем не менее это должно быть ошибкой, и поэтому clirr сообщает
это изменение как ОШИБКА двоичной совместимости.
2000 - Изменено от класс в интерфейс
Серьезность: ОШИБКА
Указанный класс стал интерфейсом в новой версии. Это изменение
всегда несовместимость двоичного кода и исходного кода по очевидным причинам.
2001 - Изменено от интерфейс в класс
Серьезность: ОШИБКА
В новой версии указанный интерфейс стал классом. Это изменение
всегда несовместимость двоичного кода и исходного кода по очевидным причинам.
3001 - удален окончательный изменение от класс
Степень серьезности: ИНФОРМАЦИЯ
Указанный класс был объявлен окончательным в старой версии, но уже не окончательный
в новой версии.
3002 - Добавленный окончательный изменение в фактически окончательный класс
Степень серьезности: ИНФОРМАЦИЯ
Указанный класс не был объявлен окончательным в старой версии, но теперь объявлен
окончательный. Обычно это несовместимость, потому что ранее существовавшие производные
классы больше не будут действительны при использовании с новой версией этого класса.
Однако в этом случае старая версия класса не имела общедоступных или защищенных конструкторов,
поэтому было невозможно, чтобы какие-либо производные классы существовали даже для старой версии
библиотека. Таким образом, изменение такого класса на final не может сломать существующие
код.
3003 - Добавленный окончательный изменение в класс
Серьезность: ОШИБКА
Указанный класс не был объявлен окончательным в старой версии, но теперь объявлен
окончательный. Любые ранее существовавшие классы, которые были объявлены подклассами этого класса.
поэтому будет недействителен с новой версией библиотеки.
VerifyError выдается загрузчиком классов при попытке загрузить
подкласс последнего класса.
Обратите внимание, что класс Y загружается стандартным загрузчиком классов только при первом
сделана попытка создать экземпляр Y или напрямую сослаться на класс
объект для класса Y. Если какой-то другой класс X имеет класс Y как объявленный член или как
параметр для некоторого метода, то загрузка класса X не приводит к загрузке класса Y.
3004 - удален Абстрактные изменение от класс
Степень серьезности: ИНФОРМАЦИЯ
Старая версия этого класса была объявлена абстрактным классом. Новая версия
не является абстрактным, позволяя пользователям создавать экземпляры класса.
3005 - Добавленный Абстрактные изменение в класс
Серьезность: ОШИБКА
Старая версия этого класса не объявлялась абстрактной. Новая версия
Аннотация. Существующий ранее код, который создает экземпляры этого класса, больше не
действительно с новой версией.
4000 - Добавленный интерфейс в набор of ввело интерфейсы
Степень серьезности: ИНФОРМАЦИЯ
В новой версии типа реализован дополнительный интерфейс. Это не
аннулировать любой существующий код (исходный или двоичный) и является полностью
обратно совместимое изменение.
Обратите внимание, что об этом сообщении можно сообщить без каких-либо изменений в
указанный тип; изменение набора интерфейсов, поддерживаемых типом, вызовет
это сообщение должно быть отправлено для каждого потомка этого типа.
4001 - удален интерфейс от набор of ввело интерфейсы
Серьезность: ОШИБКА
В старой версии этого типа было заявлено, что в ней реализован интерфейс,
новый класс или интерфейс - нет. Существующий код, который явно или неявно приводит
объекты этого типа к теперь отсутствующему интерфейсу больше не действительны.
Обратите внимание, что об этом сообщении можно сообщить без каких-либо изменений в
указанный тип; изменение набора интерфейсов, поддерживаемых типом, вызовет
это сообщение должно быть отправлено для каждого потомка этого типа.
5000 - Добавленный класс в набор of суперклассы
Степень серьезности: ИНФОРМАЦИЯ или ПРЕДУПРЕЖДЕНИЕ.
Новая версия класса имеет класс в своей иерархии наследования, который в старой версии
версия этого не сделала, либо потому, что ее прямой родитель теперь является другим классом, либо
потому что один из его родительских классов изменил иерархию наследования.
Если у указанного класса есть java.lang.Throwable в качестве предка, то это изменение
сообщается как ПРЕДУПРЕЖДЕНИЕ, потому что это изменение класса может изменить перехват исключений
поведение программ, использующих этот класс.
Обратите внимание, что об этом сообщении можно сообщить без каких-либо изменений в
указанный класс; изменение набора суперклассов класса-предка приведет к
заставить это сообщение сообщаться для каждого класса-потомка.
5001 - удален класс от набор of суперклассы
Серьезность: ОШИБКА
Старая версия этого класса имеет класс в своей иерархии наследования, который
новая версия не работает, потому что ее прямой родитель теперь является другим классом, или
потому что один из его родительских классов изменил иерархию наследования.
Существующий код, который явно или неявно приводит объекты этого типа к текущему моменту
отсутствующий тип класса больше не действителен.
Обратите внимание, что об этом сообщении можно сообщить без каких-либо изменений в
указанный класс; изменение набора суперклассов класса-предка приведет к
заставить это сообщение сообщаться для каждого дочернего класса.
Также обратите внимание, что если у этого класса есть Throwable в его родословной, тогда класс
изменение иерархии также может вызвать изменения в поведении перехвата исключений
программы, использующие этот класс.
6000 - Добавленный поле
Степень серьезности: ИНФОРМАЦИЯ
Новый класс имеет дополнительный статический член или член экземпляра. Это изменение
полностью обратно совместима.
6001 - удален поле
Серьезность: ОШИБКА
В новом классе удалено поле, присутствовавшее в старой версии. Ранее существующий код
который напрямую обращается к этому полю, больше не будет действительным.
6002 - Значение of поле нет дольше a время компиляции постоянная
Степень серьезности: ВНИМАНИЕ!
Коду, скомпилированному со старой версией класса, было разрешено "встроить"
значение этого поля, потому что оно было константой времени компиляции. Следовательно, существующие
двоичный код продолжит использовать старое значение этого поля вместо нового
значение (которое не может быть встроено).
6003 - Значение of время компиляции постоянная и менялась
Степень серьезности: ВНИМАНИЕ!
Коду, скомпилированному со старой версией класса, было разрешено "встроить"
значение этого поля, потому что оно было константой времени компиляции. Следовательно, существующие
двоичный код продолжит использовать старое значение этого поля вместо нового
значения.
6004 - Поиск напишите менялась
Серьезность: ОШИБКА
Тип, связанный с указанным статическим членом или членом экземпляра указанного
класс изменился. Существующий ранее код, который напрямую обращается к этому полю, не может
больше быть действительным, и поэтому это несовместимое изменение.
6005 - Поиск сейчас неконечное
Степень серьезности: ИНФОРМАЦИЯ
Поле ранее было окончательным и больше не является окончательным. Это означает, что поле
значение теперь может быть изменено во время существования класса или экземпляра.
Может ли значение в поле ранее быть "встроенным" в другие классы - это
проблема решается сообщениями 6002 и 6003, а не этим сообщением.
6006 - Поиск сейчас окончательный
Серьезность: ОШИБКА
Поле больше не может быть изменено во время существования класса или экземпляра.
Следовательно, код, который ранее изменил это поле, больше не действителен.
6007 - Поиск сейчас нестатический
Серьезность: ОШИБКА
Поле теперь является переменной экземпляра, а не переменной класса. Код, который
ранее обращались к этому полю через класс, а не через экземпляр класса
больше не действует.
6008 - Поиск сейчас статический
Серьезность: ОШИБКА
Поле теперь является переменной класса, а не переменной экземпляра.
По какой-то причине (предположительно, внутренние проблемы реализации) стандарт Java
заявляет, что это изменение несовместимо с двоичным кодом, и что
IncompatibleClassChangeError будет сгенерирован, если код скомпилирован против "старого"
версия класса используется вместе с «новой» версией, для которой сейчас поле
статический.
Поскольку исходному коду разрешен доступ к переменным класса через экземпляры этого
class, ожидается, что это будет изменение, совместимое с исходным кодом. Однако в настоящее время
CLIRR сообщает об этом как об ОШИБКЕ и для совместимости исходного кода.
6009 - Поиск Ещё Доступный
Степень серьезности: ИНФОРМАЦИЯ
В новой версии указанное поле доступно большему количеству кода, чем было
ранее.
6010 - Поиск Меньше Доступный
Серьезность: ОШИБКА
В новой версии указанное поле доступно меньшему количеству кода, чем было
ранее. Поэтому существующий код может больше не действовать.
6011 - удален постоянная Поиск
Уровень важности двоичных данных: ПРЕДУПРЕЖДЕНИЕ.
Уровень серьезности источника: ОШИБКА
В новом классе удалено поле, присутствовавшее в старой версии. Ранее существовавший источник
код, который напрямую обращается к этому полю, больше не будет действительным.
Однако раньше это поле было окончательным и инициализировалось постоянным значением.
Поэтому код, скомпилированный для предыдущей версии класса, будет иметь встроенный
эта константа и продолжит работу, используя предыдущее значение этого поля. А
выдается предупреждение, поскольку это часто нежелательное поведение. Однако это не
двоичная несовместимость.
7000 - Способ доставки сейчас in Суперкласс
Степень серьезности: ИНФОРМАЦИЯ
У старого класса был метод с именем X. В новом классе больше нет этого метода, но есть
родительский класс действительно определяет этот метод, поэтому несовместимость двоичного кода или исходного кода не имеет
произошло.
Обратите внимание, что это изменение может привести к тому, что новый класс станет
'Аннотация'. В этом случае об этом изменении сообщается отдельно.
7001 - Способ доставки сейчас in Интерфейс
Степень серьезности: ИНФОРМАЦИЯ
У старого класса или интерфейса ранее был метод с именем X. Новый класс или
интерфейс больше не имеет этого метода, но родительский интерфейс определяет это
метод, поэтому несовместимости двоичного кода или исходного кода не произошло.
Обратите внимание, что это изменение может привести к тому, что новый класс станет
'Аннотация'. В этом случае об этом изменении сообщается отдельно.
7002 - Способ доставки удален
Серьезность: ОШИБКА
У старого класса или интерфейса был метод с именем X. Новый класс или интерфейс не
больше не имеет этого метода, и этот метод не определен ни в одном родительском классе или
интерфейс.
Возникнет ли на самом деле ошибка во время выполнения этого изменения, зависит от использования.
узоры. Модифицированный класс можно использовать с существующим кодом до тех пор, пока это
существующий код не пытается вызвать удаленный метод. Если звонок пропавшему
создается исключение NoSuchMethodError, когда метод
происходит вызов.
7003 - Способ доставки Переопределить удален
Степень серьезности: ИНФОРМАЦИЯ
Указанный метод в старом классе или интерфейсе переопределял унаследованный
определение. В новом классе или интерфейсе больше нет этого метода явно
объявлен на нем, но он по-прежнему наследует определение, поэтому нет двоичного
несовместимость. 7004 - Изменено количество аргументов метода
Серьезность: ОШИБКА
У указанного метода были добавлены или удалены аргументы. Это означает тот код, который
ранее вызванный, он больше не будет вызывать тот же метод.
Если есть определение унаследованного метода со старым прототипом, то нет
бинарная несовместимость; код, который был скомпилирован для старой версии этого
class теперь вызовет унаследованную реализацию. В этой ситуации clirr должен
выводить информационное сообщение, а не сообщение об ошибке. Однако на текущий момент clirr
не проверяет эту ситуацию.
Если нет определения унаследованного метода со старым прототипом, то изменение
это двоичная несовместимость.
7005 - Способ доставки Аргумент Тип менялась
Уровень важности двоичных данных: ИНФОРМАЦИЯ или ОШИБКА
Уровень серьезности источника: ОШИБКА
Для указанного метода был изменен тип одного или нескольких аргументов.
Это означает, что код, скомпилированный для старой версии класса, больше не будет
вызвать тот же метод. Однако точно такой же старый исходный код при компиляции
против новой версии класса может вызвать этот метод, если типы аргументов
совместимость с присваиванием.
Если есть определение унаследованного метода со старым прототипом, то нет
бинарная несовместимость; код, который был скомпилирован для старой версии этого
class теперь вызовет унаследованную реализацию. На текущий момент clirr делает
не проверяйте эту ситуацию.
Если нет определения унаследованного метода со старым прототипом, то изменение
это двоичная несовместимость.
Если все измененные типы параметров были изменены на супертипы их предыдущих
объявленные типы или для примитивных типов параметров, если они были изменены на "более крупные"
типы в каждом случае, то новый код будет совместим с исходным кодом с предыдущим
выпуск, даже если он несовместим с двоичным кодом. Обратите внимание, что в этой ситуации
перекомпиляция кода, использующего библиотеку, может изменить свое поведение от вызова
унаследованный метод для вызова метода в классе, который имеет немного другой
прототип. В настоящее время clirr не проверяет эту ситуацию.
7006 - Способ доставки ВОЗВРАТ Тип менялась
Двоичная серьезность: ОШИБКА
Уровень серьезности источника: ИНФОРМАЦИЯ или ОШИБКА
Для указанного метода был изменен объявленный возвращаемый тип. Будь проблема
фактически происходит во время выполнения при использовании кода, скомпилированного для старой версии этого
библиотека зависит от шаблонов использования. Старый код может вызывать другие методы этого класса.
Однако любая попытка вызвать метод, тип возвращаемого значения которого изменился, приведет к
при вызове метода генерируется исключение NoSuchMethodError, поскольку возврат
Тип является частью «сигнатуры метода».
Изменение совместимо с исходным кодом тогда и только тогда, когда новый тип возвращаемого значения
присваивается старому возвращаемому типу. Это означает, что:
если старый возвращаемый тип был примитивным типом, то новый возвращаемый тип должен быть
уже, чем у старого типа.
если старый тип возвращаемого значения был интерфейсом, то новый тип возвращаемого значения должен быть
класс или интерфейс, реализующий старый тип возвращаемого значения.
если старый возвращаемый тип был классом, то новый возвращаемый тип должен быть подклассом
ранее возвращенного типа.
В настоящее время Clirr не проверяет совместимость исходного кода на предмет изменений в методе.
возвращаемые типы; в настоящее время они просто регистрируются как ОШИБКА.
7007 - Способ доставки и было Устаревшее
Степень серьезности: ИНФОРМАЦИЯ
Указанный метод объявлен устаревшим. Это всегда
бинарно-совместимое изменение, а также изменение, совместимое с исходным кодом.
7008 - Способ доставки и было Не рекомендуется
Степень серьезности: ИНФОРМАЦИЯ
Указанный метод был объявлен устаревшим в предыдущей версии, но не
больше не рекомендуется в текущем выпуске. Хотя это немного необычно, это
разрешенный. Это изменение всегда является двоично-совместимым изменением, а также
изменение, совместимое с исходным кодом.
7009 - Способ доставки is сейчас Меньше Доступный
Серьезность: ОШИБКА
Права доступа, связанные с указанным методом, были ужесточены до
разрешить меньшему количеству пользовательского кода для доступа к методу.
Является ли это изменение проблемой совместимости исходного кода или нет, зависит от
шаблоны использования.
Это изменение должно быть двоичной несовместимостью. Обратите внимание, однако, что текущие JVM делают
не проверять это. Код, скомпилированный для предыдущей версии класса, может
успешно вызывать методы, для которых у них больше нет прав доступа.
Тем не менее, в спецификации языка Java указано, что это ошибка, поэтому
clirr сообщает об этом изменении как о двоичной несовместимости.
7010 - Способ доставки is сейчас Ещё Доступный
Степень серьезности: ИНФОРМАЦИЯ
Права доступа, связанные с указанным методом, были ослаблены до
разрешить большему количеству пользовательского кода получить доступ к методу. Это всегда двоичный код и исходный код.
совместимое изменение.
7011 - Способ доставки Добавленный
Степень серьезности: ИНФОРМАЦИЯ
К указанному классу добавлен неабстрактный метод. Это всегда
бинарно-совместимое изменение.
Это также изменение, совместимое с исходным кодом.
В: если новый метод переопределяет унаследованный, то какая версия выполняет код?
скомпилирован против вызова старой библиотеки?
7012 - Способ доставки Добавленный в Интерфейс
Двоичная серьезность: ОШИБКА
Уровень серьезности источника: ОШИБКА
Объявление метода было добавлено к указанному интерфейсу. Это всегда
сообщается как ошибка двоичной совместимости, но на практике измененный класс может
успешно использоваться с кодом, скомпилированным со старым интерфейсом, в зависимости от
шаблоны использования.
Старый код, который вызывает методы после кода, скомпилированного с новым (расширенным)
интерфейс продолжит работать без проблем. И старый код, реализующий
старая версия интерфейса также будет работать правильно, пока не
код пытается вызвать любой из вновь добавленных методов для этого экземпляра. Но
код, который (корректно) вызывает один из новых методов в интерфейсе против
объект, который реализует только старую версию интерфейса, вызовет
AbstractMethodError, который будет выдан во время попытки вызова метода.
Добавление метода к интерфейсу всегда регистрируется как ОШИБКА, потому что классы
реализующие этот интерфейс теперь должны быть изменены для реализации объявленного
метод.
7013 - Резюме Способ доставки Добавленный в Класс
Двоичная серьезность: ОШИБКА
Уровень серьезности источника: ОШИБКА
В указанный класс добавлено объявление абстрактного метода. Это
всегда сообщается как ошибка двоичной совместимости, но на практике измененный класс
может успешно использоваться с кодом, скомпилированным для старого класса, в зависимости от
шаблоны использования.
Если создаются экземпляры объектов, скомпилированных по старому классу, то их
методы могут быть вызваны без проблем. Но если только что добавленный абстрактный метод
когда-либо вызывается, тогда выдается исключение AbstractMethodError в то время, когда метод
попытка вызова.
7014 - Способ доставки сейчас окончательный
Серьезность: ОШИБКА
Раньше метод не был окончательным, а теперь окончательный. Подклассы этого класса
больше не будет компилироваться и запускаться.
Когда старый класс содержал, этот метод был окончательным (явно или только путем предоставления
частные конструкторы), то подклассы не могут существовать. Clirr в настоящее время не проверяет
для этой ситуации, поэтому в некоторых угловых случаях это вызовет ложную тревогу.
7015 - Способ доставки сейчас неконечное
Степень серьезности: ИНФОРМАЦИЯ
Раньше этот метод был окончательным, а теперь не окончательный. Это всегда
бинарно-совместимое изменение.
8000 - Класс Добавленный
Степень серьезности: ИНФОРМАЦИЯ
В новой версии библиотеки есть класс, которого не было в старой.
версия.
8001 - Класс удален
Серьезность: ОШИБКА
Новая версия библиотеки больше не содержит указанный класс.
ПРИМЕРЫ
Проверьте совместимость библиотеки с предыдущей версией:
clirr -o foo-1.0.jar -n foo-2.0.jar
Проверьте обратную совместимость новой библиотеки в зависимости от журнала Apache Commons:
clirr -o foo-1.0.jar -n foo-2.0.jar -ocp /usr/share/java/commons-logging.jar -ncp
/usr/share/java/commons-logging.jar
ГЛАВНАЯ
http://clirr.sourceforge.net
Ноябрь 2013 КЛИРР(1)
Используйте clirr онлайн с помощью сервисов onworks.net