Java编译错误。 servlet的api.jar文件

时间:2011-12-01 19:30:12

标签: servlets java

我创建了简单的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中\分机

编译complite sucessful。

我的问题:为什么?为什么我必须复制文件夹%JAVA_HOME%\ jre \ lib \ ext ??

这一刻在文档中描述了什么?

和其他问题我们有一些官方文档或规范描述jdk文件夹的文件夹结构?

2 个答案:

答案 0 :(得分:2)

在运行javac时,您需要使用-classpath命令行选项指定希望编译器搜索的目录。编译器在%JAVA_HOME%\ jre \ lib \ ext中找到你的.jar的原因是它默认搜索扩展目录。

这适用于Java 1.5,但我认为它或多或少仍然正确:

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

答案 1 :(得分:2)

Shaun提供的链接是一个更完整的答案。但简而言之,使用类路径是引入第三方或外部(到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列表的抽象,强烈建议用于任何长度的重复更改代码,构建,测试和运行周期。