Suppress javac warning “…is internal proprietary API and may be removed in a future release”

前端 未结 7 1904
悲哀的现实
悲哀的现实 2020-11-30 08:09

When I compile the Spring JDBC source on OS X with JDK 1.7.0, I get this warning:

warning: CachedRowSetImpl is internal proprietary API and may be removed in         


        
相关标签:
7条回答
  • 2020-11-30 08:46

    If you are using maven, you might be interested in adding the following to your pom.xml file:

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
            <compilerArgument>-XDignore.symbol.file</compilerArgument>
        </configuration>
    </plugin>
    
    0 讨论(0)
  • 2020-11-30 08:51

    Reference its interface CachedRowSet not the implementation.

    0 讨论(0)
  • 2020-11-30 08:56

    Try the javac option

    -Xlint:none
    

    If you compile from an IDE, it should have an option to disable warnings.

    This will disable ALL warnings that are not a part of Java Language Specification. So for example "unchecked" warning will not be blocked.

    0 讨论(0)
  • 2020-11-30 08:59

    see this answer

    Cannot stop ant from generating compiler Sun proprietary API warnings

    Testing code

    @SuppressWarnings("sunapi")
    sun.security.x509.X509CertImpl test;
    

    compiling command line

    javac test.java -Werror -Xlint:sunapi -XDenableSunApiLintControl
    

    or

    javac test.java -Werror -Xlint:all -XDenableSunApiLintControl
    

    compile passed without any warnings

    remove the SuppressWarnings tag and compile again:

    an error is reported then

    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
    
    0 讨论(0)
  • 2020-11-30 09:00

    I acknowledge that this answer is a late harvest, and you will have solved your problem. But I got stuck in the same problem as you, and researching I found this solution.

    Why happens?

    https://www.oracle.com/java/technologies/faq-sun-packages.html

    Is this behavior wrong?

    No, its a warning telling us that ChachedRowSetImpl does not belong to the public interface, therefore compatibility is not guaranteed.

    Workaround

    The following code snippet creates a CachedRowSet object by using a RowSetFactory which is created by the RowSetProvider:

    RowSetFactory factory = RowSetProvider.newFactory();
    CachedRowSet rowset = factory.createCachedRowSet();
    

    This creates a CachedRowSet object from the implementation class com.sun.rowset.CachedRowSetImpl. It’s equivalent to the following statement:

    CachedRowSet rowset = new com.sun.rowset.CachedRowSetImpl();
    

    However, it’s recommended to create a CachedRowSet object from a RowSetFactory because the reference implementation may be changed in future

    0 讨论(0)
  • 2020-11-30 09:07

    This particular warning cannot be suppressed. At least not officially.

    The warning about proprietary API means that you should not use the API which causes the warning. Sun does not support such API and the warning will not be suppressible.

    If you're particularly determined, you can use the highly undocumented javac -XDignore.symbol.file flag which will compile your program against Sun's internal rt.jar rather than the public-facing symbol file ct.sym. rt.jar doesn't produce this warning.

    0 讨论(0)
提交回复
热议问题