Maven知识点

经常遗忘的知识点

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>

以后不定期更新。。

posted @ 2020-09-26 09:09  巴山夜雨时☂☂☂  阅读(155)  评论(0编辑  收藏  举报