Hạn chế truy cập: Không thể truy cập do hạn chế đối với thư viện bắt buộc .. \ jre \ lib \ rt.jar


76

Tôi đang cố gắng sửa đổi một số mã kế thừa từ khi quay lại và nhận được các loại lỗi sau:

Hạn chế truy cập: Phương thức tạo (JAXBRIContext, Đối tượng) từ loại Tiêu đề không thể truy cập được do hạn chế về thư viện bắt buộc .. \ jre \ lib \ rt.jar

cho các câu lệnh nhập này:

import com.sun.xml.internal.bind.api.JAXBRIContext;
import com.sun.xml.internal.ws.api.message.Header;
import com.sun.xml.internal.ws.api.message.Headers;
import com.sun.xml.internal.ws.developer.WSBindingProvider;

Tôi đang tìm kiếm điều này có thể có nghĩa là gì và làm thế nào để khắc phục nó, tuy nhiên không thể tìm thấy câu trả lời rõ ràng. Một số bài đăng dường như gợi ý rằng tôi có một số JAR được bao gồm để triển khai các lớp hiện có sẵn như một phần của bản phân phối java cốt lõi, nhưng theo tôi có thể thấy không có JAR nào mà tôi đưa vào chứa các phiên bản khác / cũ hơn của các lớp trên.

Bất cứ ai có thể cho tôi biết lỗi này là gì và tôi có thể sửa lỗi này như thế nào?

Cảm ơn sự giúp đỡ của bạn trước,

Olli


Câu trả lời:


128

Tôi đã gặp phải điều gì đó tương tự, tôi nghĩ rằng nguyên nhân của cảnh báo là Eclipse đang cố gắng ngăn cản bạn sử dụng các com.sungói bên trong được cài đặt như một phần của không gian làm việc JRE của bạn nhưng không phải là một phần của API Java công khai.

Như Justin nói trong câu trả lời của mình, việc thay đổi cài đặt trình biên dịch của bạn có thể ẩn cảnh báo. Một cách tiếp cận chi tiết hơn là sửa đổi đường dẫn xây dựng của bạn để cho phép rõ ràng quyền truy cập vào gói được đề cập:

  1. Mở tab Thư viện của cửa sổ thuộc tính dự án Đường dẫn xây dựng Java.
  2. Mở rộng mục nhập Thư viện Hệ thống JRE.
  3. Chọn "Quy tắc truy cập" và nhấn nút Chỉnh sửa.
  4. Nhấp vào nút Thêm trong hộp thoại kết quả.
  5. Đối với quy tắc truy cập mới, hãy đặt độ phân giải thành Có thể truy cập và mẫu thành "com/sun/xml/internal/**".

Sau khi thêm quy tắc truy cập này, dự án của bạn sẽ xây dựng mà không có những cảnh báo này.


1
hmm, lạ không làm việc cho tôi nhưng điều đó trong RAD 8 không Eclipse ... một trong những dưới đây đã làm việc tất nhiên mặc dù, không hiểu sao (chỉ cần thêm / gỡ bỏ các JRE)
bcmoney

2
+1 để thêm quy tắc truy cập cụ thể - thay vì tắt tất cả các cảnh báo. bạn rock!
rjha94,

Tôi là một khách hàng hài lòng khác. Cảm ơn vì điều này!
TonyK,

Có thể lưu cài đặt này không?
Raffi Khatchadourian

1
@Hervian Đó là điểm của các cảnh báo - các lớp này có thể thay đổi bất kỳ lúc nào. Nếu có thể, bạn nên tránh các lớp nội bộ này để sử dụng API công khai. Điều đó nói rằng, nhiều người trong số họ là một phần của OpenJDK và đã không thay đổi trong nhiều năm, vì vậy ... đó là một lời phán xét từ phía bạn.
Alex

79

Câu trả lời tuyệt vời đã được cung cấp tại chỗ ở đây .

Xem tóm tắt bên dưới:

  1. Đi tới cài đặt Đường dẫn xây dựng trong thuộc tính dự án.
  2. Xóa Thư viện Hệ thống JRE
  3. Thêm nó trở lại; Chọn "Thêm Thư viện" và chọn Thư viện Hệ thống JRE. Mặc định đã làm việc cho tôi.

Làm việc cho tôi sau khi cập nhật từ một jdk cũ hơn.
Casey Murray

Cảm ơn! Đã làm việc cho tôi trên Eclipse Kepler. Bao gồm servlet-api-3.1.jar từ bản phân phối Jetty 9 vào dự án của tôi đã gây ra sự cố rõ ràng. Hoặc có thể đó là plugin chạy cầu cảng chạy. Ồ, miễn là nó hoạt động ..
faizal

1
@AdityaSingh Điều này hoạt động vì bạn có nhiều lớp trong các tệp jar khác nhau. Xóa và thêm lại JRE lib sẽ làm cho các lớp phù hợp được ưu tiên. Nếu bạn muốn có một giải pháp cơ bản, hãy đảm bảo rằng bạn loại trừ các tệp jar có cùng lớp. Vui lòng tham khảo câu trả lời được chấp nhận cho câu hỏi này .
Ashish Kumar

41

Không phải là một giải pháp thực sự, nhưng ở mọi nơi tôi đã xem xét giải pháp được đề xuất là chỉ cần nói với Eclipse rằng đó không phải là lỗi. Bạn có thể thay đổi nó bằng cách đi tới Thuộc tính -> Trình biên dịch Java -> Cảnh báo lỗi -> API không được chấp nhận và được khôi phục lại -> Tham chiếu bị cấm (quy tắc acess), Thay đổi từ Lỗi thành Cảnh báo hoặc Bỏ qua.


điều này cũng hoạt động! điều đơn giản nhất dường như là thực hiện điều này hoặc thêm / bớt theo gợi ý của @Abimbola.
bcmoney

Cũng có tác dụng với tôi nhưng tôi phải tự hỏi tại sao cảnh báo lại có ở đó ngay từ đầu.
mister270

15

Tôi đã giải quyết vấn đề này với các bước sau: mở rộng dự án của bạn, nhấp chuột phải vào "Thư viện hệ thống JRE"> Thuộc tính> chọn tùy chọn thứ 3 "Không gian làm việc mặc định JRE"> OK. Hy vọng nó cũng giúp bạn


Nhân tiện, điều này sẽ được đặt lại mỗi khi bạn thực hiện Maven> Cập nhật trong trường hợp bạn đang sử dụng Maven và bạn không đặt: <properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties>ví dụ:
ACV

8

Trong Eclipse:
Project -> properties -> java Build Path -> libraries

Xóa Thư viện Hệ thống JRE hiện có, sau đó Add Library -> JRE System library -> next -> ok

Lỗi sẽ được loại bỏ.


5

Tôi gặp vấn đề tương tự khi plugin của tôi phụ thuộc vào một dự án khác, dự án này đã xuất một số gói trong tệp kê khai của nó. Thay vì thay đổi các quy tắc truy cập, tôi đã quản lý để giải quyết vấn đề bằng cách thêm các gói bắt buộc vào phần Gói xuất của nó. Điều này làm cho các gói có thể nhìn thấy một cách hợp pháp. Eclipse thực sự cung cấp bản sửa lỗi này trên điểm đánh dấu lỗi "Hạn chế truy cập".


1

Trong môi trường nhật thực nơi bạn thực thi các chương trình java của mình, hãy thực hiện các bước sau:

  1. Nhấp vào Dự án ngay phía trên thanh menu trong nhật thực.
  2. Nhấp vào thuộc tính.
  3. Chọn các thư viện, nhấp vào thư viện hiện có và nhấp vào Xóa ở bên phải cửa sổ.
  4. Lặp lại quá trình và bây giờ nhấp vào thêm thư viện, sau đó chọn thư viện hệ thống JRE và nhấp vào OK.

0

Tôi đang trả lời câu hỏi này vì tôi đã có một cách khắc phục sự cố này khác với các câu trả lời khác. Tôi đã gặp sự cố này khi tôi cấu trúc lại tên của các plugin mà tôi đang xuất. Cuối cùng tôi phải đảm bảo sửa chữa / thay đổi những điều sau.

  1. Các phần phụ thuộc của tệp sản phẩm,
  2. Các phụ thuộc plugin.xml (và đảm bảo rằng nó không được nhập hoàn toàn bằng hộp thoại các gói đã nhập).
  3. Tab trình cắm thêm cấu hình chạy. Run As ..-> Run Configurations-> tab Plug-in. Bỏ chọn các plugin cũ và sau đó nhấp vào Thêm plugin bắt buộc.

Điều này đã làm việc cho tôi, nhưng số dặm của bạn có thể khác nhau.


0

Tôi vừa thay đổi khía cạnh dự án thành 1.7 và nó đã hoạt động.


-2

Đi tới Buildpath

Loại bỏ JRE hiện có và thêm thư viện JRE mới chứa Jdk1.6 và kết thúc Bây giờ hãy dọn dẹp tất cả dự án và xây dựng lại

Tôi nghĩ bằng cách này bạn có thể giải quyết được lỗi của mình

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.