2011-12-01 103 views
0

我创建了简单的Java Servlet:WelcomeServlet.java。Java编译错误。 servlet-api.jar

比,我试图通过编译该文件:

javac WelcomeServlet.java 

在结果我看到编译错误:

包的javax.servlet不退出

我试图找到解决方案这个与谷歌的错误。我找到答案的第一部分:java编译器没有看到servlet-api.jar文件。

我知道,Apache Tomcat在它的lib文件夹中包含了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

compilation complite sucessful。

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

这个时刻描述文档?

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

+0

必须在classpath中放入servlet JAR。 – Michael

+1

您应该**从不**复制/移动现有的库。这只会导致运行时类加载灾难。您必须通过指定表示类路径的“-cp”或“-classpath”参数(它只是指向依赖类和JAR的磁盘文件系统路径的集合)来告诉Java编译器它们在哪里。请**撤销**所有复制/移动操作,并保持JRE和Tomcat的'/ lib'文件夹不变。 – BalusC

回答

2

肖恩提供的链接是一个更完整的答案。但简而言之,使用类路径是引入第三方或外部(对于JDK/JRE)库的最佳方式。类路径与%PATH%$PATH变量类似,但指定java用于查找的位置,而不是用于查找可执行文件的shell。

classpath为java编译器或Java虚拟机提供了搜索资源时要使用的项目列表。这个“路径”可能包括目录或文件。它通常包括jar文件和配置文件的位置。许多用于文件配置的基于Java的查找方案或以其他方式使用通过步行Classpath完成的部分变体。

我很少看到一个事件,即将jar文件放在lib/ext位置上比使用Classpath更受欢迎。

类路径通常是环境变量(%CLASSPATH%$CLASSPATH)或运行java或javac的当命令行上指定(例如-cp-classpath看到从正在运行的可执行程序的帮助下)。

构建工具(如Ant和Maven)还将提供抽象以定义您的应用程序将使用的jar列表,​​并强烈建议用于任何长度的重复更改代码,构建,测试和运行周期。