1·何为maven依赖?
何为依赖?我要和我的好朋友打电话,如果啥都没有,这事肯定办不了,所以,我需要借助于手机来帮助我完成此项任务。此时手机就充当了“依赖”的角色。
同理,maven依赖里,功能单一化的原则,迫使我们不得不站在巨人的肩膀上,借助第三方封装好的工具,来帮助我们完成想要完成的工作。很幸运的是,我们不用去各个官网下载我们需要的各个jar包,这一切,Maven先生看来眼里,怎舍得高薪资的程序猿浪费时间于查找jar上?so,Maven先生说了,只要你们声明你们想要的东西,我都会主动推送给你们。这个时候,我们只要进行 依赖配置,想要的自然会推送过来。
2·Maven依赖配置
<project>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<type>...</type>
<scope>test</scope>
<optional>...</optional>
<exclusions>
<exclusion>
<groupId>...</groupId>
<artifactId>...</artifactId>
</exclusion>
</exclusions>
</ependency>
</dependencies>
</project>
3·maven依赖范围
依赖范围控制依赖与三种classpath(编译classpath,测试classpath,运行classpath)的关系。其中,依赖 范围通过scope标签来达到依赖范围的控制。该scope标签的可取值为:
·compile
·test
·provided
·runtime
·system
·import
值为compile时,指该jar包将影响项目的三种classpath路径,即在测试,编译,运行都有该jar包且可依赖。
值为test时,指该jar包将只影响测试classpath路径下的代码,什么意思呢?1·在编译情况下不识别:如在 maven默认的源代码路径下src/main/java,中使用@test注解,编译会报错(可自行尝试);2·在运行情况下不可用:如项目最后打好的war包并无junit的依赖。
值为provided时,指该jar包只作用于编译和测试classpath,在项目最后打成的war包不存在该类jar包。怎么讲?若项目部署再tomcat的web服务器上,tomcat本身可提供jsp-api.jar,servlet-api.jar两个jar构件,则在项目中可将这两个jar包都打上provided值的scoped标签,这样可减少重复jar包依赖以及减少依赖版本冲突。
值为runtime时,指该jar包只作用于测试和运行classpath,即编译情况下不需要该jar包的参与。如JDBC驱动实现,项目主代码的编译只需要JDK提供的JDBC接口,只有在执行测试或者运行项目的时候才需要实现上述接口的具体JDBC驱动。
system和import不常用,这里不做解释。
4·maven传递依赖机制