2011-11-12 71 views
1

我在編譯java servlet時遇到了很大的問題。據我所知,我做了我需要做的一切,我正確安裝了tomcat 7,並且tomcat正在工作。據我所知,我需要將servlet.jar包添加到我的類路徑中。在我的系統上似乎沒有servlet.jar,但從我可以從tomcat docs中瞭解到它的servlet-api.jar。Java servlet無法編譯 - 無法找到javax.servlet

香港專業教育學院做到了這一點,通過在/etc/environment編輯類路徑:

PATH =「在/ usr/local/sbin中:在/ usr/local/bin目錄:/ usr/sbin目錄:在/ usr/bin中:/ sbin目錄:/斌:在/ usr /遊戲」 CLASSPATH = 「在/ usr /共享/ tomcat7/lib目錄/ servlet的api.jar文件」

不幸的是,仍然沒有運氣,我不能編譯Java servlet和IM仍然得到關於失蹤符號的警告爲javax.servlets

我使用的是Ubuntu 11.10 x64。有任何想法嗎?

回答

2

你不應該有一個CLASSPATH環境變量。

更好的方法是在編譯時使用-classpath參數爲javac.exe,運行時使用參數。以這種方式添加Tomcat servlet-api.jar。

另一個建議是學習Ant。它是一個基於Java的基於XML的構建工具。學習和使用比Maven更容易。我會以此開始。

2

javax.servletsservlet-api.jar中定義,所以你的問題必須以某種方式與你的配置。你用什麼來編譯?您是直接發佈javac命令還是使用maven,ant或eclipse等構建工具?我會推薦maven,因爲它使用單個配置文件處理您的依賴關係。真的很容易接受。

Maven中,你需要先得到它安裝/配置Maven來啓動,並與一組文件結構開始你的項目(這是簡化的,但足夠了):

/src/main/java - The root of your java files 
/src/main/webapp - The root of your webapp 
/pom.xml - Maven configuration file 

因此,一個完整的文件列表的servlet的可能是:

/src/main/java/com/mycompany/myapp/MyServlet.java 
/src/main/webapp/WEB-INF/web.xml 
/src/main/webapp/index.jsp 
/pom.xml 

第3行(而不是根文件結構等)是一樣的將是任何Web應用程序,最後是你的配置文件,該文件是這樣的:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.mycompany</groupId> 
    <artifactId>myapp</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <packaging>war</packaging> 

    <dependencies> 
    <dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>servlet-api</artifactId> 
     <version>2.5</version> 
     <type>jar</type> 
     <scope>provided</scope> 
    </dependency> 
    </dependencies> 
</project> 

這裏的重要部分是對servlet-api的依賴由maven處理,所以不需要下載它,也不需要設置類路徑或任何東西。一旦你設置了這個文件結構並編輯了你的pom,你只需將一個控制檯導航到根目錄並輸入mvn package即可。這將下載你的依賴關係,編譯你的代碼,並打包你的戰爭。 Maven提供的很多很少修改。在/etc/environment

添加

+9

「Maven」和「easy」不屬於同一句話。 – duffymo

+1

@duffymo,我已經廣泛地使用了em。我發現maven更簡單。約定超過配置。一旦你得到了非常簡單的約定,你可以免費獲得一大堆。最重要的是,依賴管理在這種情況下特別方便(如果包含不容易理解的ivy,ant可以這樣做)。 – Lucas

+0

我還沒有掌握慣例。也許還有希望,但我覺得Ant要容易得多。我是Spring用戶,所以我的大多數依賴項都很容易獲得。 Maven讓我頭痛得多,而不是治癒。 – duffymo

3

香港專業教育學院做到了這一點,通過編輯類路徑:相比之下,螞蟻就需要這個

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games" CLASSPATH="/usr/share/tomcat7/lib/servlet-api.jar"

那看起來不錯。儘管如此,PATH與特定問題無關。它沒有被Java以任何方式使用。它僅被操作系統平臺用於查找可執行文件。 CLASSPATH是相似的,但只有Java用於查找在編譯和/或運行時期間使用的類。

你的問題很可能導致因爲你使用-cpjavac命令-classpath說法。在這種情況下,CLASSPATH環境變量將被忽略(這也適用於java命令的方式,同樣在使用-jar參數時)。

您需要通過要麼CLASSPATH環境變量-cp-classpath參數指定的類路徑。一般的建議是忘記CLASSPATH環境變量,因爲只要你想做的不僅僅是「Hello World」,這被認爲是一種糟糕的做法。您可以使用:-cp-classpath參數中指定多個路徑。

$ cd /path/to/package/root/of/your/servlet/code 
$ javac -cp .:/path/to/servlet-api.jar com/example/YourServlet.java 

如果你厭倦了重複打字,每次的,只是把它放在一個.sh腳本,或使用一個構建工具,如螞蟻,它允許配置一個XML文件,或者只是使用像Eclipse,Netbeans的一個IDE或者IntelliJ,它會在你保存源文件時自動完成。