Как я могу подавить предупреждения 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", которые добавили этот последний комментарий!
Ответ 3
потому что вы не можете отключить это предупреждение
Ответ 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 для деталей