2012-09-18 69 views
9

我已經下載了兩個罐子。我想導入他們包含的一些類。我該怎麼做呢?如何將jar導入到我的java程序中?

這是我的算法類。我試着按照下面的網站上的說明無濟於事。

http://algs4.cs.princeton.edu/code/

有針對OSX的安裝程序(我跑山獅),據稱這增加了罐子到類路徑中。不幸的是,它也安裝了Java博士。我寧願只使用Sublime和Terminal。我認爲這將是很容易只是......

import java.stdlib; 

在我Percolation.java文件,但javac的-ING該程序產生一個「包STDLIB不存在」,一樣

import stdlib; 

我通過手動添加stdlib.jar和algs4.jar的位置,我的終端CLASSPATH:

export CLASSPATH=$CLASSPATH:/Users/Michael/path/to/jar/algs4.jar:/Users/Michael/path/to/jar/algs4.jar 
export CLASSPATH=$CLASSPATH:/Users/Michael/path/to/jar/stdlib.jar:/Users/Michael/path/to/jar/stdlib.jar 

我也嘗試

javac -cp $CLASSPATH:/Users/Michael/path/to/jar/algs4.jar:/Users/Michael/path/to/jar/stdlib.jar Percolation.java 

但我仍然獲得了

javac Percolation.java 
Percolation.java:1: cannot find symbol 
symbol : class stdlib 
location: package java 
import java.stdlib; 
    ^
Percolation.java:2: package java.algs4 does not exist 
import java.algs4.WeightedQuickUnionUF; 
      ^

這是怎麼回事?

還有一種方法可以將這些值永久添加到OS X山獅的CLASSPATH中。每個新的終端都必須執行該命令。

+0

什麼是'stdlib'?什麼是'Java博士'?我使用maven導入/下載我從IDE運行所需的依賴項。我不知道任何安裝程序會將您想要添加到課程路徑中的jar添加到您的課程路徑中。 –

+0

@Peter Lawrey Dr. Java是一個IDE,stdlib是我下載的一個jar文件,並且正試圖導入到我的程序中。我試圖手動將這些罐子添加到我的類路徑中,但沒有成功。 –

+0

我相信禁止將一個包命名爲java.stdlib。在運行時,會拋出java.lang.SecurityException異常。所以導入可能是錯誤的。 – RealHowTo

回答

3

如果您使用終端來編譯並啓動程序,然後在終端窗口,開始通過設置CLASSPATH

$ export CLASSPATH=$CLASSPATH:/Users/Michael/path/to/jar1.jar:/Users/Michael/path/to/jar2.jar 

然後你可以鍵入echo $CLASSPATH,看到罐子被引用。

現在,在同一個終端窗口中,使用javac來編譯你的類。如上所述設置CLASSPATH僅適用於當前的「終端」窗口及其啓動的任何進程。

或者你可以通過CLASSPATH到的javac:

$ javac -cp $CLASSPATH:/Users/Michael/path/to/jar1.jar:/Users/Michael/path/to/jar2.jar MyClass.java 

爲未來的終端會話保持此CLASSPATH,添加export線以上的文件.profile文件在你的home目錄。

+0

感謝您的幫助,但這些建議仍然會產生錯誤。我已經添加到我的問題。 –

+0

@MichaelGruber您需要將/ path /改爲零件以反映文件系統上罐子的位置。我用_path/to/_作爲佔位符。在終端中,轉到罐子的位置並輸入'pwd'。這會打印出你需要放入你的'CLASSPATH'' – pb2q

+1

是的,我知道。 echo $ CLASSPATH輸出 :/Users/Michael/Dropbox/Algorithms/includes/algs4.jar:/Users/Michael/Dropbox/Algorithms/includes/algs4.jar ---我仍然得到相同的javac錯誤。 –

0

啓動javac-classpath <path_to_jar>選項。或編輯CLASSPATH環境變量,以便它包含您希望使用的類的JAR。

2

你可能有類路徑的東西是正確的。儘管您嘗試導入的課程可能不會被稱爲java.stdlib。您需要導入完全限定的軟件包名稱...可能類似於org.somecompany.ourlibrary.stdlib。因此,您需要

import org.somecompany.ourlibrary.stdlib 

位於您的Percolations.java文件的頂部並與其餘的導入語句一致。

+1

如果它不只是stdlib或java.stdlib我不確定它會是什麼......在我從網站上獲得的提示方式上沒有多少提示。 –

+0

在許多IDE中,如果您使用來自類路徑中的庫的類,它將爲您建議併爲該類添加一個導入。你不需要知道你的大部分課程在包裝方面。 –

1

您的滲濾計劃是否包含在其自己的包裝中?如果是這樣,請嘗試通過註釋掉文件中的任何包聲明並重新編譯它,將它放入默認包中。 此外,algs4沒有在java包中,它只是它自己獨立的東西。

3

回答這個問題已經過時了,但對未來普林斯頓算法課程的參與者可能會有用。 在環境中添加CLASSPATH後,java從包中獲取類,但仍然會在導入命令中生成錯誤。您需要從源文件中刪除import algs4和stdlib,並且編譯將順利運行。

此解決方案適用於帶有zsh的Ubuntu 12.04。

0

我在本課程的工作中遇到了同樣的問題,但是對於windows。如果它能幫助某人,我會在這裏留下評論。

如果使用DrJava,則代碼中不需要任何import語句。如果您按照課程中描述的安裝步驟進行操作,則會爲您配置一切。

但是,這裏可能存在一個問題 - 它會將jar文件放入當前用戶目錄中,其路徑可能包含不適當的符號(在我的情況下是俄文字母)。您需要在編輯 - >首選項菜單中檢查它。你可以看到algs4.jarstdlib.jar路徑。確保此路徑正確並指向真實存在的文件。

我剛將所有必需的文件移動到另一個目錄並在此菜單中更改了路徑。它爲我解決了這個問題。

1

如果您正在使用Eclipse(與我一樣),請選擇當前項目,然後從菜單中打開項目屬性。在左邊選擇「Java構建路徑」,然後選擇選項卡庫。現在你點擊按鈕「添加外部罐子」,然後你指向你的jar文件,你就完成了。

祝你好運。

0

我浪費了很多時間來導入類,嘗試了「javac -cp。; stdlib.jar mad.java」等的CL選項,但用於獲得您提到的相同錯誤。
然後,我完全註釋了導入,並確保DrJava的首選項添加了2個類路徑+%CLASSPATH%變量以具有正確的值。現在簡單地工作。 祝你好運!

0

只是將軟件包命名爲默認值,那麼它將正常工作。還後你不需要導入點兒只是運行在

Fundamentsls提供了一些代碼

章像

平均

0

我的解決方案是爲我的Sublime文本編輯器添加2個新的編譯系統:一個編譯,另一個執行。使用工具 - > Build_system-> New_build_system ...從主菜單與這兩個代碼片段:

編譯(我命名文件 「的ALG-compile.sublime_build」):

{ 
    "cmd": ["javac", "-cp", "/Users/admin/algs4/stdlib.jar:/Users/admin/algs4/algs4.jar:.", "$file"], 
    "file_regex": "^(...*?):([0-9]*):?([0-9]*)", 
    "selector": "source.java" 
} 

爲運行(「的ALG-run.sublime_build」)

{ 
    "cmd": ["java", "-cp", "/Users/admin/algs4/stdlib.jar:/Users/admin/algs4/algs4.jar:.", "$file_base_name"] 
} 

不要忘記從您的系統的正確的人在這裏替代路徑的JAR文件。 我明白,這個問題是相當古老的,但我希望這將有助於某人。

0

如果您收到了「不能解析爲一個類型」的錯誤,並試圖加入stdlib.jar或algs4.jar文件,這裏是解決方案:

在stdlib.jar和algs4的庫.jar位於「默認」包中。在Java中,您無法從命名包訪問默認包中的類。如果您需要使用具有命名包的庫,則可以使用這些包版本:

stdlib-package.jar和algs4-package.jar。

你可以在這裏下載這些文件: http://algs4.cs.princeton.edu/code/

然後你就可以自動添加導入: 進口edu.princeton.cs.algs4.ClassName

0

打開你的崇高

選擇工具 - >構建系統 - >新構建系統

添加下面的代碼到新的文件

這可以告訴崇高運行命令

{ 
    "cmd": ["javac -cp /Users/yourusername/algs4/stdlib.jar:/Users/yourusername/algs4/algs4.jar:. \"$file\" && java -cp java -cp /Users/yourusername/algs4/stdlib.jar:/Users/yourusername/algs4/algs4.jar:. \"$file_base_name\""], 
    "shell":true, 
    "file_regex": "^(...*?):([0-9]*):?([0-9]*)", 
    "selector": "source.java" 
} 

希望這可以幫助那些誰是普林斯頓大學

0

以下的算法課我有同樣的問題。王仁飛的解決方案爲我工作(我沒有足夠的分數直接評論他的迴應)。

在Sublime中,導航到Preferences: Browse Packages>JavaC.sublime_build

這裏是我的樣子:

{ 
    "cmd": ["javac", "-cp", "/Users/jason/Documents/lib/*:./","$file"], 
    "file_regex": "^(...*?):([0-9]*):?([0-9]*)", 
    "selector": "source.java" 
} 

/Users/jason/Documents/lib/*:/讓崇高知道握住我的包,所以現在當我建,它第一次加載那些包的目錄位置。

相關問題