Подтвердить что ты не робот

Подавить предупреждение 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: Люди, я знаю, что лучше избегать кода, который приводит к предупреждению. И обычно это был бы мой подход. Однако я компилирую сторонний код здесь, который я не хочу переписывать. Я просто хочу добавить правильную аннотацию, чтобы подавить предупреждение, так что предупреждения, на которых я действительно могу что-то сделать, не зарываются.

4b9b3361

Ответ 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" не будет заблокировано.