2012-02-13 49 views
74

我試圖從,同時修改了一些舊代碼回來,得到以下樣的錯誤:訪問限制:不可訪問,由於所需的庫限制.. JRE LIB rt.jar的

訪問限制:該方法從類型頭創建(JAXBRIContext,對象)是不可訪問,由於所需的庫限制.. \ JRE \ LIB \ rt.jar的

這些import語句:

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; 

一直在尋找這可能意味着什麼以及如何解決這個問題,但是不能o找到明確的答案。有些帖子似乎暗示我已經包含了一些JAR,這些JAR實現了現在作爲Java核心發行版的一部分提供的類,但是據我所見,沒有一個包含的JAR包含上述類的不同/舊版本。

任何人都可以告訴我這個錯誤是什麼,以及如何解決這個問題?

感謝您的幫助已經提前,

奧利

+0

可能重複[由於限制所需的庫rt.jar對類的訪問限制](http://stackoverflow.com/questions/860187/access-restriction-on-class-due-to-restriction -on-required-library-rt-jar) – 2014-11-15 23:36:19

回答

41

並不是真正的解決辦法,但我到處看了解決方案建議是簡單地告訴Eclipse,這些都沒有錯誤。您可以通過轉至屬性 - > Java編譯器 - >錯誤警告 - >棄用和重新分類的API - >禁止引用(訪問規則),將其從錯誤更改爲警告或忽略來更改它。

+0

這也工作!最簡單的事情似乎是要麼這樣做,要麼按照@Abimbola的建議添加/刪除。 – bcmoney 2013-06-19 15:23:52

+0

好的解決方案很好地爲我工作... – 2013-08-18 07:46:01

+0

爲我工作,但我不得不想,爲什麼警告是在那裏擺在首位。 – mister270 2014-07-10 16:59:57

124

我遇到了類似的情況,我認爲警告的原因是Eclipse試圖阻止您使用作爲工作空間JRE的一部分安裝的但不屬於公共Java API的內部軟件包com.sun

正如賈斯汀在他的回答中所說,更改編譯器設置可以隱藏警告。更細化的方法是修改構建路徑以明確允許訪問所涉及的包:

  1. 打開Java Build Path項目屬性窗口的Libraries選項卡。
  2. 展開JRE系統庫條目。
  3. 選擇「訪問規則」並點擊編輯按鈕。
  4. 在結果對話框中單擊添加按鈕。
  5. 對於新的訪問規則,請將分辨率設置爲可訪問,並將模式設置爲"com/sun/xml/internal/**"

添加此訪問規則後,您的項目應該沒有這些警告生成。

+0

謝謝。真的幫助了我。 – Pushkar 2012-11-21 08:43:27

+1

嗯,奇怪沒有爲我工作,但這是在RAD 8不是Eclipse ...當然下面的工作,雖然,莫名其妙地(只是添加/刪除JRE) – bcmoney 2013-06-19 15:22:02

+2

+1添加特定訪問規則 - 而不是禁用所有警告。你搖滾! – rjha94 2013-07-16 14:55:20

77

優秀的答案已經提供現場here

請參見下面的總結:在項目屬性

  1. 轉到Build路徑設置。
  2. 刪除JRE系統庫
  3. 將其添加回去;選擇「添加庫」並選擇JRE系統庫。默認爲我工作。
+3

我不知道爲什麼,但這有幫助... – Alex 2013-08-26 15:12:42

+0

從舊的jdk更新後爲我工作。 – 2014-01-13 00:25:38

+0

謝謝!在Eclipse Kepler上爲我工作。將Jetty 9發行版中的servlet-api-3.1.jar包含到我的項目中顯然會導致問題。或者也許是運行jetty運行插件。哦,只要它的工作。 – faizal 2014-05-12 16:19:26

-2

轉到構建路徑

刪除現有的JRE,並添加含有JDK1.6 新的JRE庫,並完成 現在清理所有項目並重新構建

我認爲這種方式可以解決您的錯誤

5

我的插件取決於另一個項目,它在其清單文件中導出了一些包時,我遇到了同樣的問題。通過在Export-Package部分添加所需的軟件包,我設法解決了這個問題,而不是改變訪問規則。這使得包裹合法可見。 Eclipse實際上在「訪問限制」錯誤標記上提供了此修復。

0

我在回答這個問題,因爲我有解決這個問題的方法不同於其他答案。當我重構我導出的插件的名稱時,我遇到了這個問題。最終我必須確保修改/更改以下內容。

  1. 產品文件的依賴性,
  2. plugin.xml的依賴性(並確保它不隱式使用進口包對話框進口)。
  3. 運行配置插件選項卡。運行方式..->運行配置 - >插件選項卡。取消選中舊插件,然後點擊添加所需插件。

這對我有效,但你的里程可能會有所不同。

15

我已經通過以下步驟解決了這個問題:展開您的項目,右鍵單擊「JRE System Library」>屬性>選擇第三個選項「工作區默認JRE」>確定。希望它也可以幫助你

+0

是的,但我不明白爲什麼? – PeerNet 2015-08-14 11:20:55

+0

順便說一下,每當你做Maven的時候,它都會得到重置Maven>在你使用Maven的情況下更新並且你沒有設置:' 1.8 < maven.compiler.target> 1.8 '例如 – ACV 2015-09-22 08:07:23

+0

@ACV您對maven的解決方案不適合我... – 2017-09-21 15:34:04

0

我剛剛將項目方面改爲1.7,它工作。

8

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

刪除現有的JRE系統庫,然後Add Library -> JRE System library -> next -> ok

錯誤將被刪除。

1

在Eclipse環境中,你執行你的Java程序,採取以下步驟:

  1. 點擊項目剛剛在eclipse菜單欄上方。
  2. 點擊屬性。
  3. 選擇庫,單擊現有庫並單擊窗口右側的刪除。
  4. 重複此過程,然後單擊添加庫,然後選擇JRE系統庫並單擊確定。