DB5*_*DB5 26
以下内容取自maven文档
编
这是默认范围,如果未指定,则使用此范围.编译依赖项在项目的所有类路径中都可用.此外,这些依赖项将传播到依赖项目.
运行
此范围表示编译不需要依赖项,但是用于执行.它位于运行时和测试类路径中,但不是编译类路径.
例如,如果我们的POM中有以下两个依赖项:
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging-api</artifactId>
<version>1.1.3</version>
<scope>compile</scope> <!-- can be ommitted as it is the default -->
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.3</version>
<scope>runtime</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)
然后,commons-logging-api
在我的模块编译期间,类将在类路径上,而来自的类commons-logging
将无法使用 - 如果偶然我commons-logging
在我的一个项目的类中直接引用了类,那么构建将失败.
但是,在运行时或测试编译和执行期间,commons-logging中的类将位于类路径上,因此可以使用(即通过类commons-logging-api
或来自项目测试的类).
双方compile
并runtime
在您的项目在其他项目的依赖引用的依赖是及物动词包括(在相同的范围)Maven的.
ps正如kostja所提到的,还有provided
范围
提供
这很像compile,但表示您希望JDK或容器在运行时提供依赖性.例如,在为Java Enterprise Edition构建Web应用程序时,您可以将Servlet API和相关Java EE API的依赖关系设置为提供的范围,因为Web容器提供了这些类.此范围仅在编译和测试类路径中可用,并且不可传递.
基本上之间的差provided
并且compile
是provided
依赖不会被传递的.
想象一下,您正在将应用程序部署到兼容 Java EE 的服务器。服务器提供了实现 Java EE 标准的所有库,因此您无需将它们与应用程序一起部署。
在开发过程中,您将需要具有编译时范围的 Java EE 库,因为您需要编译类。
然而,在运行时,依赖项由应用程序服务器提供。对于这种情况,Maven 使用“provided”范围。
归档时间: |
|
查看次数: |
16259 次 |
最近记录: |