Java编译错误.servlet-api.jar



我创建了简单的Java Servlet: WelcomeServlet.java.

然后,我试着编译这个文件:

javac WelcomeServlet.java

在结果中我看到编译错误:

包javax。Servlet不退出

我试着用谷歌找到这个错误的解决方案。我发现答案的第一部分:java编译器看不到servlet-api.jar文件。

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

所以,我有这个文件,但我必须复制这个文件??

我尝试不同的文件夹:

echo %JAVA_HOME%
C:Program FilesJavajdk1.6.0_26

%PATH%包含以下行:C:Program FilesJava jdk1.6.0_26bin

那么,我复制进来:
% JAVA_HOME % bin
% JAVA_HOME % lib
% JAVA_HOME % jre lib

,结果相同的错误。只有在我复制了servlet-api.jar目录后:% JAVA_HOME % jre lib ext

编译成功。

我的问题:为什么?为什么我必须复制到文件夹%JAVA_HOME%jrelibext ??

Where This moment在文档中描述?

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

您需要在运行javac时使用-classpath命令行选项指定希望编译器搜索的一个或多个目录。编译器在%JAVA_HOME%jrelibext中找到.jar的原因是因为它默认搜索扩展目录。

这是针对Java 1.5的,但我相信它或多或少仍然是正确的:

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

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列表,强烈建议用于任何长度的重复更改代码、构建、测试和运行周期。

最新更新