Как я могу подавить предупреждения java-компилятора о API-интерфейсе Sun

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

sun.misc.BASE64Encoder является патентованным API Sun и может быть удален в

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

Ответы

Ответ 1

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

Ответ 2

Существует совершенно недокументированный способ подавления защитных прав на API от солнца! Добавьте -XDignore.symbol.file в командную строку javac.

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

Ответ 4

У Eclipse есть параметр, который (должен) выбрать это, см., например, описание примечания к выпуску Eclipse 3.1:

Предпочтения → Java → Компилятор → Ошибки/Предупреждения → Устаревший и ограниченный API → Запрещенная/Отклоненная ссылка

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

Ответ 5

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

Быстрое временное исправление для Linux:

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

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

pcregrep может быть или не быть в вашей системе - если нет, используйте свою утилиту пакета (например, в Debian, Ubuntu и т.д.: "sudo apt-get install pcregrep" )

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

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

ПРИМЕЧАНИЕ также, что стандартный "grep" также не работает, поскольку он не может охватывать несколько строк.

Ответ 6

Если вы понимаете неотъемлемые проблемы с использованием проприетарного 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>

Ответ 7

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

Ответ 8

Параметр javac -Xlint:unchecked выполняет трюк: он отключает предупреждения, см. руководство javac для деталей