2009-09-03 60 views
6

我試圖開始使用Java,但到目前爲止還沒有能夠正確地在我的機器上獲得它。我真的很想能夠從命令行編譯。按照here的說明進行操作後,我無法使用javac進行編譯。這是我到目前爲止有:獲取Java JDK在ubuntu上編譯

當我輸入:

$ java -version 

我得到:

java version "1.6.0_16" 
Java(TM) SE Runtime Environment (build 1.6.0_16-b01) 
Java HotSpot(TM) Server VM (build 14.2-b01, mixed mode) 

當我運行:

$ sudo apt-get install sun-java6-jdk 

我得到:

~$ sudo apt-get install sun-java6-jdk 
Reading package lists... Done 
Building dependency tree   
Reading state information... Done 
Suggested packages: 
    sun-java6-demo sun-java6-doc sun-java6-source 
The following NEW packages will be installed: 
    sun-java6-jdk 
0 upgraded, 1 newly installed, 0 to remove and 9 not upgraded. 
Need to get 17.4MB of archives. 
After this operation, 55.7MB of additional disk space will be used. 
WARNING: The following packages cannot be authenticated! 
    sun-java6-jdk 
Install these packages without verification [y/N]? y 
Err http://us.archive.ubuntu.com hardy-updates/multiverse sun-java6-jdk 6-07-3ubuntu2 
404 Not Found [IP: 91.189.88.140 80] 
Failed to fetch http://us.archive.ubuntu.com/ubuntu/pool/multiverse/s/sun-java6/sun-java6-jdk_6-07-3ubuntu2_i386.deb 404 Not Found [IP: 91.189.88.140 80] 
E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing? 

當我運行:

$ /media/disk/School/java/hw1$ javac HelloWorldApp,java </pre> 

我得到:

The program 'javac' can be found in the following packages: 
* java-gcj-compat-dev 
* openjdk-6-jdk 
* gcj-4.2 
* kaffe 
* ecj 
* jikes-sun 
* jikes-sablevm 
* j2sdk1.4 
* jikes-classpath 
* jikes-gij 
* gcj-4.1 
* sun-java5-jdk 
* jikes-kaffe 
* sun-java6-jdk 
Try: sudo apt-get install <selected package> 
bash: javac: command not found 

當我嘗試更新(使用sudo apt-get update)我得到:

E: The method driver /usr/lib/apt/methods/https could not be found. 

有其他人遇到這個問題?在此先感謝...

+0

你是什麼意思的「無法編譯」?找不到程序javac?錯誤編譯? – 2009-09-03 04:44:53

+0

您已安裝Java運行時。您可能沒有安裝開發工具(編譯器所在的地方) – 2009-09-03 06:17:33

+1

看起來,在那個時間點,您正在使用的特定鏡像無法連接到。問題可能出在兩端。你有沒有再試一次?它絕對看起來像'apt-get update'的問題。 – 2009-09-03 17:36:57

回答

6

您可以通過鍵入此命令在最新版本的Ubuntu上安裝JDK:

sudo apt-get install sun-java6-jdk 

您可能會發現這比嘗試手動設置它更容易。

+0

將此信息添加到原始帖子中... – danwoods 2009-09-03 11:16:29

+0

@danwoods:你可能還沒有一個最新的索引。嘗試「sudo apt-get update」,然後嘗試再次安裝。 – 2009-09-03 11:40:53

+0

顯然這個問題比我想的要大。我將該命令的結果添加到我原來的帖子中 – danwoods 2009-09-03 17:29:45

1

通常您會在PATH中找到java,而在標準的Ubuntu安裝中找不到javac。這主要是因爲安裝了gcj軟件包。也可以使用更新替代腳本更新符號鏈接。

太陽JDK的安裝後,你需要更新符號鏈接到Java,而這通常是通過類似於下面

sudo的更新替代品--config java的一個命令完成

如果沒有(Sun)java位置的硬鏈接,則可以使用類似於

sudo update-alternatives --install/usr/bin/java java/usr/lib/jvm/jdk1的命令創建它。 6.0_07/jre/bin/java 300

對於javac,可以使用以下更新替代方法創建符號鏈接:

sudo update-alternatives --install/usr/bin/javac javac /usr/lib/jvm/jdk1.6.0_07/ bin/javac 300

這將使javac在PATH上可用,就像java一樣。

當然,可以通過簡單的導出或通過更改shell配置文件來更新PATH變量。

+0

我不相信在最新版本的Ubuntu中這是真的。正如我上面提到的那樣安裝應安裝javac,並使其無需任何符號鏈接即可訪問。 – 2009-09-03 05:25:04

+0

我還沒有在9.04上驗證過它。但是我已經在版本6.x-7.x上做了這個。可能不是8.x.但是對於不同版本的配置問題,我有最難忘的記憶。 – 2009-09-03 05:35:38

+0

那麼,我認爲8.04是第一個包含官方sun.debs的版本。這些工作比嘗試手動安裝要好得多,正如先前版本中所需的那樣。 – 2009-09-03 07:34:30

5

試試這個:

  1. 下載Java SDK到$ HOME /檔案(例如,$ HOME /歸檔/ JDK-6u16-linux的-x64.bin)。
  2. 將Java解壓縮到/ opt中(或者如果不想使用root,則將其解壓到另一個位置)。例如:

    CD /選擇
    搭配chmod 755 $ HOME /歸檔/ JDK-6u16-linux的-x64.bin
    須藤$ HOME /歸檔/ JDK-6u16-linux的-x64.bin

  3. 創建符號鏈接(這樣可以方便升級):

    須藤LN -s jdk1.6.0_16 JDK

  4. 編輯$ HOME/.bashrc中

  5. 追加以下幾行:

    JAVA_HOME = /選擇/ JDK
    PATH = $ PATH:$ JAVA_HOME/bin中

  6. 刷新環境變量:

    源$ HOME/.bashrc中

您現在應該可以編譯程序。

我更喜歡這種方法來安裝託管包,因爲卸載(或升級)似乎從未完全刪除SDK的所有位,並且似乎妨礙在同一臺機器上安裝多個版本的Java軟件開發工具包同時。我過去曾遇到apt-get和Java的問題。而且,這種方法使我能夠隨時確定使用哪個版本的Java。

如果您不習慣使用root/opt,您可以使用自己的帳戶和$HOME/bin/jdk來代替。相應地更改.bashrc文件。

刪除以前安裝的任何Java版本。您可能需要重新啓動終端會話。

這適用於所有版本的Java,因爲至少Java 1.2。

+1

這種方法實際上有效。儘管看起來似乎過於複雜。 – Dananjaya 2010-10-31 05:06:42

+0

這是解決這些問題必須做的事情 – diegoaguilar 2013-08-20 00:06:20

0

我剛剛遇到了這個問題,同時從http://validator.nu安裝html驗證器。要安裝sun-java6-jdk我必須添加這個存儲庫:deb http://archive.canonical.com/ lucid partner

要完成驗證器安裝,我必須將我的$JAVA_HOME設置(導出)爲/usr/lib/jvm/java6-sun

請將「清醒」改爲適合您的Ubuntu版本。