簡體   English   中英

Java編譯錯誤。 servlet的api.jar文件

[英]Java compile error. servlet-api.jar

我創建了簡單的Java Servlet:WelcomeServlet.java。

然后,我嘗試通過以下方式編譯該文件:

javac WelcomeServlet.java

結果我看到編譯錯誤:

軟件包javax.servlet不會退出

我嘗試使用Google解決此錯誤的解決方案。 我找到了答案的第一部分:Java編譯器沒有看到servlet-api.jar文件。

我知道,它的lib文件夾中的Apache Tomcat包含servlet-api.jar文件。

所以,我有這個文件,但是我必須在哪里復制這個文件?

我嘗試使用其他文件夾:

echo %JAVA_HOME%
C:\Program Files\Java\jdk1.6.0_26

%PATH%包含以下行:C:\\ Program Files \\ Java \\ jdk1.6.0_26 \\ bin

因此,我復制:
%JAVA_HOME%\\ bin中
%JAVA_HOME%\\ lib中
%JAVA_HOME%\\ JRE \\ lib中

並導致相同的錯誤。 而且只有在我將servlet-api.jar復制到以下目錄之后:%JAVA_HOME%\\ jre \\ lib \\ ext

編譯成功。

我的問題:為什么? 為什么我必須在文件夾%JAVA_HOME%\\ jre \\ lib \\ ext中復制?

此刻在文檔中描述的位置在哪里?

還有其他問題,我們有一些官方文檔或規范來描述jdk文件夾的文件夾結構?

運行javac時,您需要使用-classpath命令行選項指定要編譯器搜索的目錄。 編譯器在%JAVA_HOME%\\ jre \\ lib \\ ext中找到您的.jar的原因是因為它默認情況下搜索擴展目錄。

這是針對Java 1.5的,但我相信它或多或少仍然正確:

http://docs.oracle.com/javase/1.5.0/docs/tooldocs/findingclasses.html

Shaun提供的鏈接是一個更完整的答案。 簡而言之,使用類路徑是引入3rd party或外部(向JDK / JRE)庫的最佳方法。 類路徑是一個類似於%PATH%$PATH變量的概念,但是指定了Java用於查找的位置,而不是Shell用於查找可執行文件的位置。

類路徑為java編譯器或java虛擬機提供了在搜索資源時要使用的項目列表。 該“路徑”可以包括目錄或文件。 它通常包括jar文件,有時還包括配置文件的位置。 許多基於Java的用於文件配置的查找方案,或者使用[ Class#getResourceAsStream() ] [1]使用遍歷類路徑來實現的某種變體。

我很少見到發生過這樣的事件:將jar文件放在lib / ext位置比利用Classpath更可取。

類路徑通常是環境變量( %CLASSPATH%$CLASSPATH ),或者在運行java或javac時在命令行上指定(例如, -cp-classpath可以從正在運行的可執行文件中獲得幫助)。

諸如Ant和Maven之類的構建工具還將提供抽象定義您的應用程序要使用的jar列表,​​強烈建議將其用於任何長度的重復更改代碼,構建,測試,運行周期。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM