Class Path和Build Path有什么区别


86

我对这两个术语感到困惑。

另外,我应该怎么做才能在Spring MVC项目的src文件夹下创建文件?当我使用File对象创建时,它会在C:\ SpringSourceTool中创建文件。我猜这是ClassPath吗?

我如何获得applicationcontext应用程序的文件夹或根目录?

Answers:


100

构建路径是用于构建应用程序。它包含所有源文件和编译应用程序所需的所有Java库。

类路径被用于执行该应用程序。这包括运行Java应用程序所需的所有Java类和库。Classpath是强制性的,.如果Java虚拟机找不到用户定义的路径,则使用默认路径。(jar清单中的CLASSPATH环境变量,-cp标志或Class-Path:属性)


但是javac需要一个classpath参数。可以说这个参数“重载”用于指定构建路径吗?
aioobe 2010年

4
号的类路径参数是一个暗示什么,他应该认为可用的/在运行时提供的,因为你不建每次使用自己的类编译器(如JFC,图书馆,...)。在构建路径中包含源代码和/或源/编译依赖关系,并在那里寻找他们。
Johannes Wachter

在开发插件时,我将所有需要的库添加到类路径中,但什么也没导入。直到我添加它们以构建路径,Eclipse才看到它们。
巴克斯2012年

51

类路径是告诉(标准)Java编译器和Java运行时在何处查找已编译类的常规方法。它通常是JAR文件名和目录名的序列。由编译器和运行时系统所使用的类路径并不必须是相同的,但它们通常应该是,尤其是对于一个小项目。

Buildpath不是标准的Java术语。这是更丰富的方式的用语,即典型的IDE指定组成应用程序的“项目”之间的关系。IDE使用它来找出用于编译Java代码的类路径和源路径,以及用于运行它的类路径。IDE还使用构建路径来弄清楚如何将代码及其依赖性打包为(例如)WAR文件。

例如,一个项目的Eclipse构建路径包括它所依赖的其他项目,并列出了该项目包含/依赖的其他库JAR。它还列出了下游项目可以依赖的当前项目中的软件包。

(如果在项目中使用Maven,则IDE构建路径机制仅次于POM文件中声明的依赖项。例如,将Eclipse与m2eclipse结合使用,构建路径是从POM文件中合成的。)


27

类路径在运行时用于加载编译的类和资源。

构建路径在编译时用于查找构建项目所需的依赖项。


您是否可以说类路径用于查找.class文件(和其他已编译资源),而构建路径用于查找需要编译的源文件?
亚当

1
@亚当,我认为那不是完全正确的。有时,构建路径需要.class文件来编译源文件。因此,构建路径也使用幕后的类路径。如果您花一些时间使用Java CLI编译和运行Java项目,则可以看到此信息。javac和java命令都有一个classpath选项,因为它们都可能需要它。
intrepistar_88 '18

4

每个Java项目都有其自己的构建路径,该路径指定编译该项目所需的所有依赖项。这些依赖关系可能来自工作空间中的其他Java项目,Java存档.jar文件或包含.class文件的文件夹。

在CLASSPATH环境中,您仅需要指定.class文件(即jar,zip文件–在jar,zip文件中,您只会找到Java类),即您正在帮助Java虚拟机(JVM)查找Java类文件

另外,我应该怎么做才能在Spring MVC项目的src文件夹下创建文件?当我使用File对象创建时,它会在C:\ SpringSourceTool中创建文件...

这是启动JVM的位置,如果要在其他位置创建文件,请从此处使用相对路径。

获取更多信息。


您甚至没有在答案中提及构建路径。
aioobe

4

我想添加到Andreas_D的答案中,以解释IDE /编译器需要使用构建路径来定位代码所使用的外部包和类 有时我们将这些称为“依赖项”

注意:这些外部程序包可能打包在压缩的.jar文件中,或者实际上,可能有多个jar文件打包在“库”中。一个图书馆或一组图书馆通常构成一个“框架”

如果您的代码需要其他人编写的代码,则可以使用命令它们导入到您的类中import。但是,仅此命令是不够的,因为编译器或IDE需要知道这些类的位置。您可以在构建路径中指定它。

classpath另一方面告诉运行应用程序在您的代码的实际执行过程中发现任何依赖关系的JVM。

还要注意: Classpath供JVM使用。

Buildpath供IDE /编译器使用,并且是从开发环境构造类路径的一种方法。当通过IDE配置构建路径时,还将在项目中配置一个名为.classpath的隐藏文件。这用于在部署时提供JVM的类路径。


1

类路径来自维基百科):

与经典动态加载行为类似,Java虚拟机在执行Java程序时会懒惰地查找和加载类(仅在首次使用该类时才加载类的字节码)。类路径告诉Java在文件系统中何处查找定义这些类的文件。

虚拟机按以下顺序搜索和加载类:

引导程序类:Java平台基础的类(包括Java类库的公共类和该库正常运行所必需的私有类)。

扩展类:位于JRE或JDK扩展目录中的软件包,

jre / lib / ext /用户定义的软件包和库

默认情况下,仅JDK标准API和扩展包的包是可访问的,而无需设置查找位置。所有用户定义的包和库的路径都必须在命令行中设置(或在与包含类的Jar文件关联的清单中)中设置。

简而言之-在程序运行时,JVM仅根据需要加载类。当需要一个类时,JVM将依靠类路径来知道从何处加载字节码(即:.class文件)。

另一方面,构建路径通常由Eclipse等IDE使用,以了解在何处查找编译项目源代码所需的其他库。运行时不使用构建路径。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.