Maven scope 类型

[size=medium]1. compile[/size]

[b]编译[/b]范围。默认scope。

在工程编译(classpath)和打包时(如war, ear等,会包含该jar文件)有效。


[size=medium]2. runtime[/size]

[b]运行时[/b]范围,用于运行和测试。

编译代码时不需要该jar包,打war包时会被包含到其中,供容器动态加载其中的类。
在面向接口编程中应用广泛,编译的是接口,运行时通过[b]读取配置文件[/b]、[b]获取注解[/b]等途径加载具体实现类并实例化。


<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy</artifactId>
<version>1.8.3</version>
<scope>runtime</scope>
</dependency>



[size=medium]3. provided[/size]

[b]已提供[/b]范围。

表明该jar包已由容器(jetty, tomcat等)或JDK提供,只在编译时使用,不会放到war包中。如J2EE规范的servlet-api和jsp-api等jar包,已由servlet容器提供,war包中有不同版本的包会引起版本冲突,导致容器启动失败。


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

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



[size=medium]4. test[/size]

[b]测试[/b]范围。

供src/test/java目录下的单元测试类编译和运行,不会打包到war包中,如TestNG, JUnit等:


<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>6.4</version>
<scope>test</scope>
</dependency>


[size=medium]5. system[/size]

[b]系统[/b]范围。

当转换ant工程为maven工程时,为了最大程度利用原有类库,减少更改,通过scope的system形式引用原类库路径的jar包。
另外,如果较早的jar包没有版本号,也没有按照maven库的路径规则存放,可以通过此种方式引用:


<dependency>
<groupId>com.sun</groupId>
<artifactId>btrace</artifactId>
<version>1.0</version>
<scope>system</scope><!-- maven从systemPath去找对应的jar包 -->
<systemPath>D:\Program Files\btrace-bin\build\btrace-client.jar</systemPath>
</dependency>

注:当scope为system时,groupId, artifactId和version可以填任意非空值,但去除这三个属性会报错。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值