"Игнорирование атрибута InnerClasses" предупреждает об убийстве Eclipse

У меня есть пара импортированных jars, которые имеют эту ошибку в Eclipse, когда проект строится:

[2011-04-08 16:31:48 - MokbeeAndroid] Dx warning: Ignoring InnerClasses attribute for an anonymous inner class
(net.sf.antcontrib.logic.ForEach$1) that doesn't come with an
associated EnclosingMethod attribute. This class was probably produced by a
compiler that did not target the modern .class file format. The recommended
solution is to recompile the class from source, using an up-to-date compiler
and without specifying any "-target" type options. The consequence of ignoring
this warning is that reflective operations on this class will incorrectly
indicate that it is *not* an inner class.

Теперь мне было все равно, потому что ошибок не было. Но теперь я добавил Apache Sanselan, у которого такая же проблема. Другие банки Apache также делают это, и не только один раз за банку, но один раз за класс, который имеет внутренний класс, который заставляет каждую сборку откачивать чудовищный журнал консоли. Хуже того, каждое предупреждение, похоже, замедляет процесс сборки Eclipse, и в конечном итоге Eclipse просто падает из-за ошибки переполнения памяти. Это в тот момент, когда я ничего не могу построить, даже сразу после запуска моего компьютера.

Решение, похоже, должно перекомпилировать исходный код (open-source и все), но ни один из них не может быть перекомпилирован ни во что, кроме Maven, который, после этого безрезультатно, я подозреваю, что это проблема в первое место.

Меня не волнуют результаты предупреждения, просто что Eclipse не тратит всю память, рассказывая мне об этом. Итак, есть ли способ, чтобы я мог устранить проблему или заставить Eclipse останавливаться на ней (возможно, пропуская эту проверку)?

Ответ 1

Это вызвало у меня большую боль с помощью android-maven-plugin и других библиотек, которые включали commons-logging. Это блокировало мою сборку. Хуже всего то, что некоторые библиотеки были включены транзитивно, поэтому просто использовать <exclude> не получится. С небольшим намеком от еще одного сообщения я решил, что могу полностью исключить библиотеку-нарушитель примерно так:

    <!-- prevent commons-logging from being included by the Google HTTP client 
        dependencies -->
    <dependency>
        <groupId>commons-logging</groupId>
        <artifactId>commons-logging</artifactId>
        <version>1.1.1</version>
        <scope>provided</scope>
    </dependency>

Ответ 2

Если вы перекомпилируете источник библиотек в Maven, вам может потребоваться обновить версию Java в POM до версии 1.6 (или любую другую версию Java, которую вы используете для своего проекта). Просто посмотрев на Sanselan, я отмечаю, что у него в версии 1.4 есть версия.