Подавить предупреждение javac "... является внутренним патентованным API и может быть удален в будущем выпуске"
Когда я компилирую источник JDBC Spring в OS X с JDK 1.7.0, я получаю это предупреждение:
warning: CachedRowSetImpl is internal proprietary API and may be removed in a future release
Как подавить предупреждающее сообщение во время компиляции?
Я уже знаю и использую аннотации Java @SuppressWarning. Я ищу конкретное использование этого для подавления предупреждений, которые я описал.
Мой вопрос конкретно в этой строке кода:
@SuppressWarnings("valuegoeshere")
что должно быть "valuegoeshere" заменено?
EDIT: Люди, я знаю, что лучше избегать кода, который приводит к предупреждению. И обычно это был бы мой подход. Однако я компилирую сторонний код здесь, который я не хочу переписывать. Я просто хочу добавить правильную аннотацию, чтобы подавить предупреждение, так что предупреждения, на которых я действительно могу что-то сделать, не зарываются.
Ответы
Ответ 1
Это конкретное предупреждение не может быть подавлено. По крайней мере, официально.
Предупреждение о собственном API означает, что вы не должны используйте API, который вызывает предупреждение. Солнце не поддерживает такой API, и предупреждение не будет подавляемым.
Если вы определенно настроены, вы можете использовать сильно недокументированный флаг javac -XDignore.symbol.file
, который скомпилирует вашу программу против внутреннего rt.jar
Sun, символ символа ct.sym
. rt.jar
не выводит это предупреждение.
Ответ 2
Если вы используете maven, вам может быть интересно добавить в свой файл pom.xml
следующее:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<compilerArgument>-XDignore.symbol.file</compilerArgument>
</configuration>
</plugin>
Ответ 3
Ссылка на его интерфейс CachedRowSet не на реализацию.
Ответ 4
см. этот ответ
Невозможно остановить ant от генерации компилятора Sun для API-интерфейсов
Код тестирования
@SuppressWarnings("sunapi")
sun.security.x509.X509CertImpl test;
компилирование командной строки
javac test.java -Werror -Xlint:sunapi -XDenableSunApiLintControl
или
javac test.java -Werror -Xlint:all -XDenableSunApiLintControl
компиляция прошла без каких-либо предупреждений
удалите тег SuppressWarnings
и снова скомпилируйте
сообщается об ошибке
test.java:4: warning: X509CertImpl is internal proprietary API and may be removed in a future release
sun.security.x509.X509CertImpl test;
^
error: warnings found and -Werror specified
1 error
1 warning
Ответ 5
Я пробовал
@SuppressWarnings("all")
но это не сработало.
Итак, я прибегал к ужасному, ужасному клогу, который я не рекомендую вообще, но в этом конкретном случае предупреждение исчезло. Я использовал отражение, чтобы создать экземпляр нового экземпляра класса com.sun.rowset.CachedRowSetImpl.
Я заменил эту строку, которая вызвала предупреждение:
return new CachedRowSetImpl();
с этим блоком:
try {
final Class<?> aClass = Class.forName("com.sun.rowset.CachedRowSetImpl");
return (CachedRowSet) aClass.newInstance();
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException e) {
throw new RuntimeException(e);
}
Пожалуйста, не делайте этого в своем собственном коде без предварительного рассмотрения любой другой опции.
Ответ 6
Попробуйте параметр javac
-Xlint:none
Если вы компилируете из среды IDE, она должна иметь возможность отключать предупреждения.
Это отключит ВСЕ предупреждения, которые не являются частью спецификации Java Language Specification. Так, например, предупреждение "unchecked" не будет заблокировано.