![](/img/trans.png)
[英]Compile java with tomcat servlet-api.jar using Powershell
[英]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.