Java中的 CompileTime 类路径与 RunTime 类路径有何不同?
什么是类路径?
类路径是指所有类/jar 都可用的路径。
什么是编译时类路径?
这个类路径包含编译应用程序所需的所有类/jar,而不会出现任何语法错误。
现在我们可能认为我们的项目编译成功,所以它会很好地执行。但这并不总是正确的,因为在某些情况下(如下所述)要成功执行项目,您可能在运行时需要一些其他类/jar。这就是运行时类路径出现的原因。
什么是运行时类路径?
具有成功执行应用程序所需的所有类/jar 的类路径。
设置类路径:只需在 pom.xml 文件中添加依赖项,就会自动将 jars 添加到类路径中。
sample pom.xml
4.0.0
com.softvision
SpringMVC
war
1.0-SNAPSHOT
SpringMVC Json Webapp
http://maven.apache.org
3.2.2.RELEASE
1.9.10
1.6
org.springframework
spring-core
${spring.version}
org.springframework
spring-web
${spring.version}
org.springframework
spring-webmvc
${spring.version}
org.codehaus.jackson
jackson-mapper-asl
${jackson.version}
注意:类路径设置将由 eclipse 或任何其他 IDE 自动完成。这不能在这里显示。
CompileTime 类路径与 RunTime 类路径有何不同?
- 案例 1 :假设我们正在开发一个 Spring-MVC Web 应用程序来发布 JSON 数据。所以为了实现它,我们需要Jackson jar 将JSON 数据映射到DTO 类。如果我们在类路径中没有这个 jar,那么在编译时我们不会收到任何错误,但我们的应用程序将无法正确执行,因为它需要 Jackson 来在运行时进行数据绑定,这是不可用的。
这就是为什么我们说编译时和运行时类路径是不同的。
- 案例 2 :在开发基于 servlet 的应用程序时,我们需要servlet-api.jar ,这样我们就可以在编写代码时使用HttpServlet 、 HttpServletRequest 、 HttpServletResponse等,并且最终不会出现编译错误。此时,我们使用的 servlet-API只是规范,而不是 servlet-API 的实际实现。
实际上,实现是运行基于 servlet 的应用程序所需的 JEE 容器。所以我想说的是,在运行这样的应用程序时,JEE 容器将在运行时提供实现类以成功运行它,而 JEE 容器应用程序将无法运行。