2015-10-20 69 views
0

我目前正在關注這本書Head First Servlets和JSP,並且我到了第81頁的作者要求使用javac編譯servlet的這一點。關於這個servlet + tomcat示例,無法使用javac編譯servlet

我有問題來執行該代碼行。我認爲我的JAVA_HOME等必須正確設置,因爲我創建了一個示例HelloWorld.java並編譯爲使用javac的 ,並創建了通信者.class文件。

我看不到這個命令的邏輯,你指定一個servlet-api.jar文件的類路徑,然後給它另一個路徑,以便它可以執行.java文件? 我想擺脫這個洞,我現在在。這些路徑我的文件:

C:\用戶\卡洛斯大號\ Tomcat的\ Apache的Tomcat的8.0.28 \ BIN \ servlet的api.jar文件 ,這是我的BeerSelect.java文件是: C:\ Users \ Carlos L \ Tomcat \ My Tomcat Projects \ beer-v1 \ src \ com \ example \ web \ BeerSelect.java

到目前爲止我一直在輸入: javac -classpath C:\ Users \ Carlos大號\ Tomcat的\ Apache的Tomcat的8.0.28 \ BIN \ servlet的api.jar文件;類:。 d類的src \ COM \例子\網絡\ BeerSelect.java

和我收到此錯誤:

的javac:無效的標誌:d類 用法:javac的

這不應該是這樣的硬。

回答

0

首先,是它是針對一個罐子進行編譯的,然後針對不同的一個進行編譯。特別是一個名爲-api .jar的jar通常僅包含構成應用程序接口aka API的類,並且足以編譯想要調用某些內容但實際執行這些調用的程序需要額外的內部類包裝在罐子裏使用各種名稱,如東西 - impl,東西 - 身體,簡單的東西,或多個罐子,如東西 - 基本東西 - 核心東西 - 附加東西 - 選項等。

第二,你的書顯然是使用java源代碼文件和編譯後的類文件在獨立的並行子樹這裏命名爲src和的通用(但不是必需或通用)方案。你的特定源文件顯然是src\com\example\web\BeerSelect.java。該語法運行java編譯器這種情況是:

javac -classpath (classpath) -d classes src\com\example\web\BeerSelect.java 
# or abbreviate -classpath as -cp, or use envvar CLASSPATH instead 

這是連字符,然後d,然後是一個空格,然後將目錄名在此classes,然後另一個空間和源路徑(或多個sourcepaths)。

您不應該在最初的類路徑中指定classes,而只需要指定servlet-api.jar文件。如果以後編譯一些但不是src子樹的所有sourcefiles,以前編譯的類文件進行其他 sourcefiles已經在classes子樹,你既需要servlet-api.jarclasses目錄。在Windows上,用分號;分隔類路徑條目,並在Unix上使用冒號:,但不應混用它們。所以,你的情況下,將包括:

javac -classpath \path\to\servlet-api.jar;classes (rest as above) 

除了你的路徑名稱顯然包含空格C:\users\Carlos L\...所以你必須加上引號值:

javac -classpath "C:\users\Carlos L\tomcat-8.0.28\bin\servlet-api.jar;classes" (rest as above)` 

作爲替代打字無數次,你可以把價值ENVVAR CLASSPATH

set CLASSPATH="C:\users\Carlos L\tomcat-8.0.28\bin\servlet-api.jar;classes" 

,然後簡單地做

javac -d classes src\com\example\web\BeerSelect.java 

對於項目中的任何其他類,您都可以找到它們。