通知
关于网站更多信息请加whimurmur模板/jpress插件QQ群(1061691290)            jpress从3.x升级到4.x,显示有些问题,慢慢修复中
文章来源于网络,无法注明出处的还请谅解,如果出处注明错误(如仍是载转),请联系我修改

Maven依赖中的scope总结(转载)

359人浏览 / 0人评论 / | 这是对我有帮助的文章  | 分类: 技术介绍使用  | 标签: 转载  | 

作者:hello_world!

链接:https://blog.csdn.net/djrm11/article/details/114296116

来源:CSDN


scope是限制Dependency的作用范围的, 影响maven项目在各个生命周期时导入的package的状态。

自2.0.9版本发布后,新增了一种:import,现在已经有了6种scope。

下面分别来说明:

compile:不声明scope元素的情况下的默认值。compile表示被依赖包需要参与当前项目的编译,包括后续的测试,运行周期也参与其中,是一个比较强的依赖。打包的时候通常需要包含进去。

provided:这个scope假定对应的依赖会由运行这个应用的JDK或者容器来提供。最好的例子就是servletAPI。

<dependency>
    <groupId>javax.servlet.jsp</groupId>
    <artifactId>jsp-api</artifactId>
    <version>2.1</version>
    <scope>provided</scope>
</dependency>

该依赖理论上可以参与编译,测试,运行等周期,但是不会被打包到最终的artifact中。

runtime:这种作用域的依赖只会在测试和运行期可用,不需要参与项目的编译。这些依赖将会被打包到最终的artifact中。与compile相比,跳过了编译而已。典型的例子是:JDBC驱动,适用运行和测试阶段。比如你有一个基于web的应用需要在运行时才访问MySQL数据库。你的代码仅仅是基于JDBC API来编写,也就是说只在编译期需要JDBC API JAR,而在运行的时候才需要JDBC的驱动实现。

test:只参与测试工作过程中的测试和执行,典型的例子就是:JUnit,但是这些依赖不会被打包到最终的artifact中。

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.11</version>
    <scope>test</scope>
</dependency>

注:execution必须定义在test scope下。

system:和provided scope很像。唯一的区别在于,在system scope中,你需要告诉Mave如何去找到这个依赖(方法是通过systemPath属性来指定依赖的路径),如果你要引用的依赖在Maven仓库中不存在时,就可以用这个scope。不推荐使用system依赖。

<dependency>
  <groupId>javax.sql</groupId>
  <artifactId>jdbc-stdext</artifactId>
  <version>2.0</version>
  <scope>system</scope>
  <systemPath>${java.home}/lib/rt.jar</systemPath>
</dependency>

import:从其它的pom文件中导入依赖设置,它只在在dependencyManagement元素下使用,表示从其他pom中导入dependency的配置。


亲爱的读者:有时间可以点赞评论一下

点赞(0) 打赏

全部评论

还没有评论!
广告位-帮帮忙点下广告