2009-07-16 22 views
14

Tôi đang sử dụng phương thức mã hóa() từ gói sun.misc.BASE64Encoder. Làm cách nào để ngăn chặn các cảnh báo trình biên dịch mà nó tạo ra?Làm cách nào để ngăn chặn cảnh báo trình biên dịch java về API độc quyền Sun

sun.misc.BASE64Encoder là Sun API độc quyền và có thể được loại bỏ trong

Và như một followup, tại sao tôi không thấy cảnh báo này trong Eclipse?

+1

thể thay thế nó với một thực hiện, ví dụ như, http://iharder.sourceforge.net/current/java/base64/ – JeeBee

+5

Hoặc http: // commons. apache.org/codec/apidocs/org/apache/commons/codec/binary/Base6 4.html – JeeBee

+1

bản sao có thể có của [Suppress javac warning "... là API độc quyền nội bộ và có thể bị xóa trong bản phát hành trong tương lai"] (http://stackoverflow.com/questions/13855700/suppress-javac-warning-is- – Flow

Trả lời

16

Bạn có thể chuyển sang một việc thực hiện Base64 khác nhau, ví dụ, http://commons.apache.org/codec/apidocs/org/apache/commons/codec/binary/Base64.html mà là một phần của commons gói Apache, mà bạn có thể đã bao gồm trong classpath của bạn, hoặc http://iharder.sourceforge.net/current/java/base64/ mà bạn chỉ có thể kéo dài việc thực hiện và dính vào cây nguồn của bạn nếu bạn không muốn một Jar khác trên đường đi.

+0

Tôi có thể thay đổi việc nhập khẩu sang phiên bản Apache Commons và evertyhing sẽ hoạt động không? –

0

Đóng gói cuộc gọi trong lớp mà bạn đặt trong một thư viện jar trên đường dẫn lớp của bạn. Sau đó, cảnh báo chỉ hiển thị khi thư viện đó được biên dịch lại.

2

Bạn không thể tắt chúng, Eclipse chỉ lọc chúng cho bạn (nếu được yêu cầu làm như vậy).

nhanh sửa chữa tạm thời trên Linux:

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

2> & 1 ... đặt thiết bị lỗi chuẩn vào STDOUT, vì vậy các đường ống "|" sẽ làm việc

pcregrep có thể hoặc có thể không có mặt trên hệ thống của bạn - nếu không, sử dụng tiện ích gói của bạn (ví dụ trên Debian, Ubuntu vv: "sudo apt-get install pcregrep")

Các tìm kiếm biểu hiện cho Cảnh báo "Sun API độc quyền" và hai dòng sau (chứa dòng và "^" cho biết vị trí của lỗi trong dòng).

Tôi để lại "cảnh báo XY". dòng trong lúc kết thúc, kẻo tôi quên có cảnh báo; o) Lưu ý rằng nếu bạn có các cảnh báo khác là tốt, số lượng báo cáo sẽ tất nhiên không chính xác: o) cũng

LƯU Ý chuẩn " grep "không hoạt động tốt, bởi vì nó không thể mở rộng nhiều dòng.

+0

nhưng bạn có thể tắt chúng! xem Michael Chaves trả lời! –

3

Eclipse có cài đặt (nên) chọn tùy chọn này, xem ví dụ: các desciption trong the Eclipse 3.1 release notes:

Preferences → Java → Compiler → lỗi/Warnings → Deprecated Và API Restricted → Forbidden/nản Reference

(và trang bất động sản dự án để cho phép ghi đè dự án cụ thể của cài đặt này)

-3

các javac tùy chọn -Xlint:unchecked không làm các trick: nó vô hiệu hóa các cảnh báo, xem the javac manual để biết chi tiết

+2

Không, lá cờ đó không tắt cảnh báo cụ thể này. –

24

có một cách hoàn toàn không có giấy tờ để ngăn chặn những lời cảnh báo mặt trời độc quyền API! Thêm -XDignore.symbol.file vào dòng lệnh javac.

Tôi tìm thấy điều này tại http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6476630 (cuộn tất cả các cách để nhận xét cuối cùng).Tất cả chúng ta đều cần suy nghĩ tốt về "xfournet", người đã thêm nhận xét cuối cùng đó!

+0

Cảm ơn bạn! Đây chính xác là những gì tôi cần! –

+4

Điều đáng ghi nhớ là tại sao cảnh báo tồn tại, và tại sao nó không phải là có thể đóng nó, không phải với '@SuppressWarnings (" all ")', hoặc '-nowarn' hoặc' -Xlint: none' hoặc '-Xmaxwarns 0'. Nếu bạn phụ thuộc vào các lớp học nội bộ, chương trình của bạn sẽ sớm bị phá vỡ. Nhưng đây là một hack gọn gàng khi bạn biết những gì bạn đang làm và cảnh báo API độc quyền chỉ là tiếng ồn làm tắc nghẽn giao diện điều khiển. Cảm ơn! – Boann

2

Nếu bạn hiểu được những vấn đề cố hữu với việc sử dụng một API độc quyền và quyết định để làm điều đó dù sao, và nếu bạn đang sử dụng maven, bạn có thể quan tâm thêm dòng sau vào pom.xml tập tin của bạn:

<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> 
0

Nếu bạn đang sử dụng jdk 1.8 sau đó bạn có thể sử dụng dưới đây

java.util.Base64 
Các vấn đề liên quan