# Classpath 在哪?

问题

src 目录就是 classpath 。这个说法对不对?

# 1. 什么叫 Classpath?

Classpath 就是『字面含义』!指的就是放项目的 .class 文件的文件夹(位置)

# Java 项目的 Classpath

对于 java 项目,.class 文件在项目编译后出现的 bin 目录下。

这个目录下的内容是:

  • 与包名一致的目录层次结构

  • .class 文件

Java 项目
│── ...
└── bin
    └── com
        └── softeem
            └── App.class

# Java Web 项目的 Classpath

对于 java-web 项目,.class 文件在项目编译后出现的 build/classes 下。

这个目录下的内容是:

  • 与包名一致的目录层次结构

  • .class 文件

Java Web 项目
│── ...
└── build
    └── classes
        └── com
            └── softeem
                └── App.class

这两个文件夹(的位置)才是名副其实的 Classpath 。

##『src 目录就是 Classpath』不对

原因很简单,src 目录下根本就没有 .class 文件!

一个根本就没有 .class 文件的文件夹 根本不可能 / 没有资格 是 Classpath 。

##『src 目录就是 Classpath』有一定道理

在编译项目时,编译器(或开发工具)是对 src 下的内容进行编译,而后再将编译的结果『搬运』到 Classpath 下。

那么也即是说,src 和 Classpath 是有对应关系的!

  • src 下的目录结构(即包结构)与 Classpath 下的目录结构(即包结构)是一样的。

  • src 下出现的 .java 文件,在 Classpath 下就是对应的 .class 文件。

  • src 下出现的配置文件.xml.properties会被『搬运』到 Classpath 下的同样位置。

因为 src 和 Classpath 的对应关系,所以,说 src 就是 Classpath(从最终的效果上看)勉强也算对

# 2. 有对应关系的文件夹可以不止一个

src 和 Classpath 的对应关系并非唯一。你可以去设置更多的文件夹与 Classpath 的对应关系。

未来编译器在编译项目时,会将这 N 个配置文件的内容编译并『搬运』到 Classpath 中。