Maven 和依赖相关的配置有两个:一个是 dependencies、一个是 dependencyManagement。后者中的依赖除了可以配置版本号,也可以配置 scope,但一般不这么做。因为具体依赖的 scope 通常会留给具体的项目去配置。例如 JUnit,通常来说它的 scope 是 test,但是某些项目,比如 Spring Test 模块,JUnit 的 scope 就不是 test,而是默认的 compile。
使用 Maven 的一个实践经验是 dependencies 中的 scope 不可少(dependencyManagement 中不用配置)。实际工作中经常看到有些项目测试的依赖不指定 scope 为 test。这会导致项目最终的构件会包含一些不必要的依赖。一般情况下没有问题,但是项目规模大了之后,依赖冲突的问题就会频现。这些问题,多数时候只能在运行时发现,让人防不胜防。