Предупреждение «Игнорирование атрибута InnerClasses» убивает Eclipse - PullRequest
13 голосов
/ 08 апреля 2011

У меня есть несколько импортированных jar-файлов, которые имеют эту ошибку в 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, у которого та же проблема. Другие jar-файлы Apache также делают это, и не один раз на jar, а один раз на класс, который имеет внутренний класс, что заставляет каждую сборку выкачивать чудовищный журнал консоли. Хуже того, каждое предупреждение, кажется, замедляет процесс сборки Eclipse, и в конечном итоге Eclipse просто вылетает из-за ошибки переполнения памяти. Это тот момент, когда я не могу ничего построить, даже сразу после запуска компьютера.

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

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

Ответы [ 2 ]

8 голосов
/ 29 ноября 2011

Это доставляло мне много боли из-за 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>
1 голос
/ 08 апреля 2011

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

...