菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
169
0

Maven知识点

原创
05/13 14:22
阅读数 41037

经常遗忘的知识点

Maven依赖Scope

scope(依赖范围) 编译 测试 运行 举例 备注
compile Y Y Y spring-core 默认值
provided Y Y N jdk、servlet-api
test N Y N Junit
system Y Y N 本地的,Maven仓库之外的类库文件
runtime N Y Y JDBC驱动实现
  1. 当依赖的scope为compile的时候,那么当前这个依赖的包,会在编译的时候将这个依赖加入进来,并且在打包(mvn package)的时候也会将这个依赖加入进去。

  2. 当依赖的scope为provided的时候,在编译和测试的时候有效,在执行(mvn package)进行打包成war包的时候不会加入,比如:servlet-api,因为servlet-api,tomcat等web服务器中已经存在,如果在打包进去,那么包之间就会冲突。

  3. 当依赖的scope为test的时候,指的的是在测试范围有效,在编译与打包的时候都不会使用这个依赖。

  4. runtime:运行时依赖范围。对于测试与运行classpath有效,但在编译时无效,典型的是JDBC驱动,项目只需要编译JDK提供的JDBC接口,只有在测试和运行项目时才需要实现具体的上述接口的JDBC驱动。

  5. System:系统依赖范围。该依赖与三种classpath关系与provided范围一致。使用system范围依赖时必须通过systempath显示指定依赖文件位置,通常不是通过maven仓库解析,往往与本机系统绑定。

举一个应用system的例子,以前写过一个modbus协议master端的java解析器,用过一个外部的jar包,就是用的system进行约束的。

<!-- 本地的jar包打成jar包或者war包 -->
    <dependency>
      <groupId>seroutil</groupId>
      <artifactId>seroutil</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <scope>system</scope>
      <systemPath>${basedir}/src/main/resources/lib/seroUtils.jar</systemPath> <!-- ${basedir} 是当前项目里的路径和pom.xml同级的路径-->
    </dependency>

以后不定期更新。。

发表评论

0/200
169 点赞
0 评论
收藏