2010-09-29 78 views
1

我正在嘗試import org.apache.commons.fileupload.*但我被告知它不存在。Java Imports Error

我下載這個JAR:http://commons.apache.org/fileupload/

,並把它放在classpath。那麼我在這裏做錯了什麼?

+0

您正在編寫一個Web應用程序嗎? – 2010-09-29 20:56:16

+0

你怎麼把它放在類路徑中? – OscarRyz 2010-09-29 20:56:41

+0

你如何構建你的應用程序?使用螞蟻,maven,eclipse? – CoolBeans 2010-09-29 21:01:28

回答

1

最可能你正在考慮%CLASSPATH%環境變量。你不應該那樣做。 JAR文件必須位於動態Web應用程序項目的/WEB-INF/lib文件夾中。該文件夾默認由webapp的類路徑覆蓋。只要你在該文件夾中放入JAR文件,一個體面的IDE(Eclipse,Netbeans等)就會自動將它添加到構建路徑

當您在命令控制檯中使用普通香草javac.exe進行編譯時,您必須在-cp參數中指定它。


更新: 假設你正在使用Windows和坐在源根文件夾,這裏是如何javac.exe樣子:

javac -cp .;/path/to/tomcat/lib/*;/path/to/WEB-INF/lib/* com/example/Servlet.java

注:通配符僅適用於JDK 1.6或更新。否則,你必須單獨指定所有庫。

+0

當我包含servlet-api.jar時,我通過'set classpath'來包含它,那麼這將如何改變呢? – 2010-09-29 21:12:51

+0

我現在在評論中看到您在命令控制檯中執行此操作 - 我真的沒有想到,因爲這非常麻煩。在這種情況下,您需要將完整路徑添加到commons-fileupload。jar'添加到'-cp'參數中,由(半)冒號分隔(取決於OS)。不要忘記在包含空格的地方圍繞單個路徑加引號。你當然可以使用'%CLASSPATH%'環境變量,但這被認爲是不好的做法。最好寫一個'.bat'或'.cmd'文件,該文件在命令中有正確的'-cp'參數。 – BalusC 2010-09-29 21:16:29

+0

好吧,我現在正在工作(我知道命令行很麻煩,但我喜歡我喜歡的東西,畢竟沒有人說6502 asm是流水線的)。我需要做更多的修補工作來弄清楚發生了什麼問題,但使用javac -cp進行工作就很好。 – 2010-09-29 21:22:59

0

罐子是否在您的classpath?還請查看this討論通配符導入的缺點。

+0

我說我將JAR添加到類路徑中。 – 2010-09-29 21:01:43

+0

我在說檢查以確保jvm使用你認爲是的classpath。 – Adam 2010-09-29 21:08:02

0

你看到你的課堂在罐子裏嗎?要了解在一個罐子裏存在類,請執行以下操作:

# linux 
jar tvf jarname.jar | grep classname 

# win 
jar tvf jarname.jar | findstr classname 

要了解在任何數量的罐的存在你的類,你可以這樣做:

# linux 
for f in `find . -name *.jar`; do echo $f; jar tvf $f | grep classname; done | less 
0

由於你正在編寫一個servlet,你可能已經創建了一個web項目。將您的fileupload jar放在WEB-INF/lib文件夾中,然後讓IDE中的項目在您的項目構建路徑中自動放置。


編輯看到你使用命令行,請務必提供完整的jar文件路徑CLASSPATH(包括JAR名及其擴展,以分號分隔)。

+0

我沒有使用IDE ,我通過命令行來做事情。 – 2010-09-29 21:16:34