2009-07-16 2 views
14

Я использую метод encode() из пакета sun.misc.BASE64Encoder. Как подавить предупреждения компилятора, которые он генерирует?Как я могу подавить предупреждения компилятора java о собственном API Sun

sun.misc.BASE64Encoder является ВС патентованный API и могут быть удалены в

И как катамнестического, почему я не вижу это предупреждение в Eclipse?

+1

может заменить его другой реализации, например, http://iharder.sourceforge.net/current/java/base64/ – JeeBee

+5

Или Http: // Общин. apache.org/codec/apidocs/org/apache/commons/codec/binary/Base6 4.html – JeeBee

+1

Возможный дубликат [Suppress javac warning "... является внутренним проприетарным API и может быть удален в будущем выпуске"] (http://stackoverflow.com/questions/13855700/suppress-javac-warning-is- внутренне-собственность-api-and-may-be-deleted-in-af) – Flow

ответ

16

Вы можете переключиться на другую реализацию Base64, например, http://commons.apache.org/codec/apidocs/org/apache/commons/codec/binary/Base64.html, который является частью Общин пакетов Apache, которые вы, возможно, уже включены в вашем пути к классам, или http://iharder.sourceforge.net/current/java/base64/, которые вы могли бы просто взять реализацию и вставьте в свое исходное дерево, если вы не хотите, чтобы другой Jar на пути.

+0

Могу ли я просто изменить импорт в версию Apache Commons, и evertyhing будет работать так же? –

0

Инкапсулируйте вызов в классе, который вы размещаете в библиотечном банке в вашем пути к классам. Затем предупреждение отображается только тогда, когда эта библиотека перекомпилирована.

2

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

Быстрый промежуточный фикс на Linux:

javac *.java 2>&1 | pcregrep -v -M ".*Sun proprietary API.*\n.*\n.*\^" 

2> & 1 ... ставит STDERR в STDOUT, так что трубопровод "|" будет работать

pcregrep может или не может присутствовать на вашей системе - если нет, то используйте утилиту пакета (например, на Debian, Ubuntu и т.д.: «Суда APT-получить установку pcregrep»)

Выражение поиска для Предупреждение «Sun proprietary API» и следующие две строки (содержащие строку и «^», указывающие положение ошибки в строке).

Я оставляю «предупреждения XY». линия в конце, чтобы не забыть там были предупреждения; о) Обратите внимание, что если у вас есть другие предупреждения, а также, число сообщили там, конечно, не будет правильно: о)

Отметим также, что стандарт " grep "тоже не работает, поскольку он не может охватывать несколько строк.

+0

ах, но вы можете отключить их! см. ответ Майкла Чавеса! –

3

У Eclipse есть настройка, которая (должна) подбирать это, см., Например, Дайте описание в the Eclipse 3.1 release notes:

Настройки → Java → Compiler → Ошибки/предупреждения → Устаревшие и Запретной API → Запрещенные/обескуражен Ссылка

(и страница свойств проекта, чтобы позволить конкретным проектам переопределения этого параметра)

-3

javac варианта -Xlint:unchecked действительно делает трюк: он отключает предупреждения, см the javac manual подробности

+2

Нет, этот флаг не отключает это конкретное предупреждение. –

24

Существует совершенно недокументированный способ подавить предупреждение ВС патентованного API! Добавить -XDignore.symbol.file в командную строку javac.

Я нашел это на http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6476630 (прокрутите весь путь до самого последнего комментария).Мы все должны мыслить добрые мысли о «xfournet», которые добавили этот последний комментарий!

+0

Спасибо! Это именно то, что мне нужно! –

+4

Стоит вспомнить, почему существует предупреждение, и почему не следует закрывать его, а не '@SuppressWarnings (« все ») или« -знать »или« -Xlint: none »или' -Xmaxwarns 0'. Если вы зависите от внутренних классов, ваша программа рано или поздно сломается. Но это аккуратный взлом, когда вы знаете, что делаете, а проприетарное предупреждение API - это просто шум, забивающий консоль. Благодаря! – Boann

2

Если вы понимаете врожденные проблемы с помощью системного API и решили сделать это в любом случае, и если вы используете Maven, вы можете быть заинтересованы в добавлении следующей строки в pom.xml файла:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-compiler-plugin</artifactId> 
    <version>2.3.2</version> 
    <configuration> 
     <compilerArgument>-XDignore.symbol.file</compilerArgument> 
    </configuration> 
</plugin> 
0

If вы используете JDK 1.8, то вы можете использовать ниже

java.util.Base64