Java构建路径

Eclipse把Java构建路径的信息放在“.classpath”文件中,此文件位于项目文件夹根目录。直接修改“.classpath”内容也可以设置构建路径,但必须在修改后对项目进行刷新。


一、Classpath基础

Java虚拟机(JVM)借助类装载器装入应用程序使用的类,具体装入哪些类根据当时的需要决定。CLASSPATH环境变量告诉类装载器到哪里去寻找第三方提供的类和用户定义的类。另外,你也可以使用JVM命令行参数-classpath分别为应用程序指定类路径,在-classpath中指定的类路径覆盖CLASSPATH环境变量中指定的值。

类路径中的内容可以是:文件的目录(包含不在包里面的类),包的根目录(包含已打包的类),包含类的档案文件(比如.zip文件或者.jar文件)。在Unix家族的系统上,类路径的各个项目由冒号分隔,在MS Windows系统上,它们由分号分隔。

类装载器以委托层次的形式组织,每一个类装载器有一个父类装载器。当一个类装载器被要求装载某个类时,它在尝试自己寻找类之前会把请求先委托给它的父类装载器。系统类装载器,即由安装在系统上的JDK或JRE提供的默认类装载器,通过CLASSPATH环境变量或者-classpath这个JVM命令行参数装入第三方提供的类或者用户定义的类。系统类装载器委托扩展类装载器装入使用Java Extension机制的类。扩展类装载器委托自举类装载器(bootstrap class loader)装入核心JDK类。

你可以自己开发特殊的类装载器,定制JVM如何动态地装入类。例如,大多数Servlet引擎使用定制的类装载器,动态地装入那些在classpath指定的目录内发生变化的类。

必须特别注意的是(也是令人吃惊的是),类装载器装入类的次序就是类在classpath中出现的次序。类装载器从classpath的第一项开始,依次检查每一个设定的目录和压缩文件,尝试找出待装入的类文件。当类装载器第一次找到具有指定名字的类时,它就把该类装入,classpath中所有余下的项目都被忽略。

看起来很简单,对吧?

二、可能出现的问题

不管他们是否愿意承认,初学者和富有经验的Java开发者都一样,他们都曾经在某些时候(通常是在那些最糟糕的情形下)被冗长、复杂的classpath欺骗。应用程序所依赖的第三方类和用户定义类的数量逐渐增长,classpath也逐渐成了一个堆积所有可能的目录和档案文件名的地方。此时,类装载器首先装载的究竟是哪一个类也就不再显而易见。如果classpath中包含重复的类入口,这个问题尤其突出。前面已经提到,类装载器总是装载第一个它在classpath中找到的具有合适名字的类,从实际效果看,它“隐藏”了其他具有合适名字但在classpath中优先级较低的类。

如果不小心,你很容易掉进这个classpath的陷阱。当你结束了一天漫长的工作,最后为了让应用程序使用最好、最新的类,你把一个目录加入到了classpath,但与此同时,你却忘记了:在classpath的另一个具有更高优先级的目录下,存放着该类的另一个版本!





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这个问题通常表示您的构建路径中缺少Servlet API库。您可以按照以下步骤解决该问题: 1. 在您的项目中添加Servlet API库。您可以通过以下方式之一来完成此操作: - 如果您使用的是Maven,则在pom.xml文件中添加以下依赖项: ``` <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>3.0.1</version> <scope>provided</scope> </dependency> ``` - 如果您使用的是Gradle,则在build.gradle文件中添加以下依赖项: ``` compileOnly 'javax.servlet:javax.servlet-api:3.0.1' ``` - 如果您不使用构建工具,则可以手动将servlet-api.jar文件添加到您的构建路径中。该文件通常位于Tomcat或其他Java Web服务器的lib目录中。 2. 如果您已经添加了Servlet API库,但仍然无法解决该问题,请尝试刷新您的构建路径。您可以按照以下步骤执行此操作: - 在Eclipse中,请右键单击您的项目,选择“属性”,然后选择“Java构建路径”>“库”选项卡。找到Servlet API库,然后单击“删除”按钮。然后单击“添加库”按钮,选择“服务器运行时”,然后选择您正在使用的Web服务器。最后,单击“完成”按钮以刷新构建路径。 - 在IntelliJ IDEA中,请打开您的项目设置,选择“模块”>“依赖项”选项卡。找到Servlet API库,然后单击“-”按钮将其删除。然后单击“+”按钮,选择“库”,然后选择您正在使用的Web服务器。最后,单击“应用”按钮以刷新构建路径。 如果您仍然无法解决该问题,请确保您的Web项目正确配置了Web模块和Servlet规范版本。您可以按照以下步骤检查此配置: - 在Eclipse中,请右键单击您的项目,选择“属性”,然后选择“项目面板”。确保“Web模块”选项已选中,并且版本号正确。 - 在IntelliJ IDEA中,请打开您的项目设置,选择“模块”,然后确保“Web”选项卡上的“Web模块”和“Servlet规范”选项都已正确设置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值