繁体   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