每个 Maven 依赖项都有一个作用域,用于定义该依赖项在其上可用的类路径。
为项目创建 JAR 时,依赖项不会与生成的工件捆绑在一起。它们仅用于编译。(但是,您仍然可以让 maven 在构建的 jar 中包含依赖项,请参阅:使用 Maven 在 jar 中包含依赖项)
使用 Maven 创建 WAR 或 EAR 文件时,可以将 Maven 配置为将依赖项与生成的工件捆绑在一起,还可以将其配置为使用作用域从 WAR 文件中排除某些依赖项。provided
最常见的作用域 — — 指示在执行应用程序时,项目在编译类路径、单元测试编译和执行类路径以及最终运行时类路径上的依赖项可用。在 Java EE Web 应用程序中,这意味着依赖项将复制到已部署的应用程序中。但是,在 JAR 文件中,使用作用域时将不包括依赖项。compile
compile
runtime
scope 指示项目在单元测试执行和运行时执行类路径上可以使用依赖关系,但与作用域不同,在编译应用程序或其单元测试时,该依赖项不可用。运行时依赖项将复制到已部署的应用程序中,但在编译期间不可用。这有利于确保您不会错误地依赖于特定的库。假设您正在使用特定的日志记录实现,但您只想在源代码中导入日志记录外观。您将包含具有作用域的具体日志库,这样您就不会错误地依赖它。compile
runtime
最后,scope 指示执行应用程序的容器代表您提供依赖项。在 Java EE 应用程序中,这意味着依赖项已经位于 Servlet 容器或应用程序服务器的类路径上,并且不会复制到已部署的应用程序中。这也意味着您需要此依赖项来编译项目。provided