在什么情况下,java项目的类路径将与其构建路径不同?

在什么情况下,java项目的类路径将与其构建路径不同?,java,eclipse,classpath,buildpath,Java,Eclipse,Classpath,Buildpath,我正在查看Eclipse中我的Java项目的Buildpath和Classpath。我注意到我的项目的buildpath中包含的所有jar都自动包含在它的类路径中 Eclipse为什么会这样做是有道理的。我的意思是,如果我需要在我的代码中实例化一个外部类,那么我需要在buildpath中使用这些类来编译代码。在运行时,我也需要将这些类加载到jvm中 然后看起来构建路径中包含的所有类都需要在类路径中。虽然我想不出一个项目的类路径与它的构建路径不同的情况 上述理解是否准确?你能给我一个场景,在这个场

我正在查看
Eclipse
中我的
Java
项目的
Buildpath
Classpath
。我注意到我的项目的buildpath中包含的所有jar都自动包含在它的类路径中

Eclipse为什么会这样做是有道理的。我的意思是,如果我需要在我的代码中实例化一个外部类,那么我需要在buildpath中使用这些类来编译代码。在运行时,我也需要将这些类加载到jvm中

然后看起来构建路径中包含的所有类都需要在类路径中。虽然我想不出一个项目的类路径与它的构建路径不同的情况


上述理解是否准确?你能给我一个场景,在这个场景中,类路径比构建路径中的类有更多的类吗?

在很多情况下,类只在运行时需要,而不是编译时需要。其中最典型的是JDBC驱动程序;代码是根据JDBCAPI编写/编译的,但在运行时,类路径上必须有一个驱动程序类。还有很多其他的例子,特别是当你进入各种框架时,这些框架都有一个标准的API,并且可以在运行时“注入”不同的实现。

一个非常常见的例子是实现一些API的类,比如Servlet API。每个容器(Tomcat、Jetty、WebSphere)提供Web应用程序通常不知道的类,因为它只使用接口


更广泛地说,此模式用于服务提供者接口,以支持在运行时添加实现接口的插件

假设您的项目依赖于库A,而A在内部使用库B,而B在内部使用库C。您是否需要B和C来构建应用程序?不,你需要他们来运行吗?是的,因为A需要B,B需要C。