📜  Java中的 CompileTime 类路径与 RunTime 类路径有何不同?

📅  最后修改于: 2022-05-13 01:55:16.631000             🧑  作者: Mango

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 ,这样我们就可以在编写代码时使用HttpServletHttpServletRequestHttpServletResponse等,并且最终不会出现编译错误。此时,我们使用的 servlet-API只是规范,而不是 servlet-API 的实际实现。

    实际上,实现是运行基于 servlet 的应用程序所需的 JEE 容器。所以我想说的是,在运行这样的应用程序时,JEE 容器将在运行时提供实现类以成功运行它,而 JEE 容器应用程序将无法运行。