![](/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.