我见过的所有 Java 项目都使用遵循包结构的文件夹结构。这会导致出现大量不包含任何文件的文件夹。
例如,包以 com.mydomain.mysystem.myutility
开头。这将导致文件夹 src\com
、src\com\mydomain
、src\com\mydomain\mysystem
不包含任何文件。 myutility
很可能也只包含文件夹。
很可能还会有一个包含名称 myutility
的项目文件夹,因此完整的文件夹路径可能是 myutility\src\main\java\com\mydomain\mysystem\myutility\其他文件夹
这种做法很常见,但它让我们想知道它有多有用。与不创建这些额外文件夹的情况相比,有什么好处?例如使用 myutility\src\main\java\otherfolder
它似乎同样有效,但它为每个人节省了额外的导航步骤。我可以用这两种方法编译 Java 源文件。
在项目中,通常所有源代码都位于 com\mydomain\mysystem
中。将这些“空”文件夹放入所有项目中有什么好处?
需要澄清的是,我并不是质疑包结构的有用性。 Maven 也很清楚。
问题是为什么我们使用在组织的整个存储库中通常相同的空文件夹。
最佳答案
源(和类)文件是这样组织的,以便 Java 编译器(和运行时环境)可以找到它们。
当Java编译器编译你的类时,它需要你的类所依赖的每个类的源文件或类文件,以便它可以检查该类是否存在,是否使用正确的参数调用了所有方法等。 ,如果找到源文件但没有找到类文件,或者类文件比源文件旧,它将编译您使用的类的源文件。
编译器当然可以只检查类路径的所有子文件夹,甚至整个磁盘,但这会花费很多时间。由于这种约定,编译器只需检查每个类路径条目的单个子文件夹。当然,你可以想出不同的解决方案来解决这个问题,但(当时)Sun 的人认为这是最好的选择。
当然,上述也适用于运行时加载的类文件,因此类文件也存储在类似的文件夹结构中。
另请注意,Java 应用程序和库通常打包为 Jar 文件(基本上是内部具有相同文件夹结构的 zip 文件),因此在许多情况下它们在文件系统中显示为单个文件。
关于Java 包结构与文件夹结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36717446/