配置CLASSPATH后Java普通程序和Servlet无法同时编译运行如何解决
问题原因
JDK 1.5及以上版本默认无需配置全局CLASSPATH系统变量,默认会自动加载*当前工作目录(.)*下的自定义类和JRE自带的核心类库,足以支撑普通Java程序的编译运行。
当你手动配置全局CLASSPATH仅指向servlet-api.jar的路径时,JDK会直接覆盖默认的类加载路径,仅读取你配置的路径下的类库,普通Java程序需要的核心类、当前目录下的自定义类都无法被加载,自然编译失败。
解决方案
不要配置全局CLASSPATH系统变量,改为针对Servlet项目单独指定依赖路径即可,具体操作分两种场景:
- 命令行编译Servlet时,用
-cp(即-classpath)参数临时指定servlet-api.jar路径,同时保留当前目录的加载权限:- Windows系统命令示例:
javac -cp .;C:\apache-tomcat-9.0\lib\servlet-api.jar 你的Servlet类名.java - Linux/macOS系统命令示例:
javac -cp .:/usr/local/apache-tomcat-9.0/lib/servlet-api.jar 你的Servlet类名.java
javac 类名.java即可正常运行。 - Windows系统命令示例:
- 使用IDEA、Eclipse等IDE开发时,直接在对应项目的依赖库设置中添加Tomcat安装目录下的
servlet-api.jar即可,IDE会单独管理项目级依赖,不会影响全局Java环境。
小技巧
如果经常需要用命令行编译Servlet,可以把上述带-cp参数的编译命令写为批处理(Windows下.bat文件)或者Shell脚本(Linux/macOS下.sh文件),每次编译直接执行脚本即可,无需重复输入长路径。
内容的提问来源于stack exchange,提问作者ADITYA UDAY UBALE
相关产品推荐
相关产品推荐

