Java 包结构与文件夹结构

标签 java package structure

我见过的所有 Java 项目都使用遵循包结构的文件夹结构。这会导致出现大量不包含任何文件的文件夹。

例如,包以 com.mydomain.mysystem.myutility 开头。这将导致文件夹 src\comsrc\com\mydomainsrc\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/

相关文章:

python - pip 无法下载 jupyter 的要求

linux - 使用 Cygwin 安装 Kaldi,zlib 出错

c++ - 结构数组有什么问题?

java - 组织基于 Java 的游戏的源代码

c - 函数更改其他变量的数据

java - 有没有办法用一种方法禁用所有按钮?

java - 如何在多台机器上使用一个 Sonar 服务器

java - 如何对在具有未知对象参数的构造函数的类中工作的方法进行单元测试 (Junit 4)

java - 在 JComponent 上创建阴影的颜色不同于白色的问题

java - protected 和包访问