Scala物理目录结构最佳实践:包对应文件路径的官方建议咨询
Scala 包声明与源码目录对应规则说明
Scala 语言规范本身没有强制要求源码的物理存放路径必须和包声明保持一致,这是和Java语言的显著差异之一。但包路径和目录结构对齐是Scala生态公认的通用约定,官方维护的构建工具、项目脚手架、核心开源项目都默认遵循该规则,不存在官方专门的文档单独说明,但属于生态通用的事实标准。
你给出的示例路径存在冗余前缀,标准的对应结构如下:
示例代码:
package com.company.project class SomeClass {}
如果是采用sbt(Scala官方默认构建工具)的标准项目结构,源码存放路径应为:
<项目根目录>/src/main/scala/com/company/project/SomeClass.scala
你提到的路径开头多了com/company/project/前缀,属于多余的冗余层级,不需要重复在项目根目录前拼接包名。
以下是该约定的通用实践依据:
- sbt、Mill等Scala主流构建工具默认按包路径检索编译源码,遵循该约定可以无需自定义构建配置,避免编译异常
- IntelliJ IDEA、VS Code Metals插件等主流Scala开发工具的代码导航、自动补全、重构等功能,都默认基于包与目录对齐的规则实现,不遵循约定会导致相关功能失效
- Spark、Akka、Play Framework等Scala官方维护的大型开源项目,以及绝大多数生产级Scala项目都严格遵循该约定,对齐后可以降低团队协作、代码开源后的阅读适配成本
只有开发单文件Scala脚本、用Scala CLI运行临时测试代码的场景下,可以不用遵循该约定,其余生产级项目都建议严格遵守。
内容的提问来源于stack exchange,提问作者user_1357
相关产品推荐
相关产品推荐

