maven中的 type ,scope的作用
dependency为什么会有type为pom,默认的值是什么?
dependency中type默认为jar即引入一个特定的jar包。那么为什么还会有type为pom呢?当我们需要引入很多jar包的时候会导致pom.xml过大,我们可以想到的一种解决方案是定义一个父项目,但是父项目只有一个,也有可能导致父项目的pom.xml文件过大。这个时候我们引进来一个type为pom,意味着我们可以将所有的jar包打包成一个pom,然后我们依赖了pom,即可以下载下来所有依赖的jar包
scope元素的作用:控制 dependency 元素的使用范围。通俗的讲,就是控制 Jar 包在哪些范围被加载和使用。具体值如下:
compile:默认值。表示被依赖项目需要参与当前项目的编译、测试、打包、运行,是一个比较强的依赖。
test:依赖项目仅仅参与测试相关的工作。包括测试代码的编译和执行,不会被打包,例如:junit。
runtime:表示被依赖项目无需参与项目的编译,不过参与后期的测试、打包、运行。与compile相比,跳过了编译。例如JDBC驱动,适用运行和测试阶段。
provided:理论上可以参与编译,测试等周期,但不被打包,也不会参与运行(比如需要排除掉Spring Web里的Tomcat),因为其他的依赖会提供。相比于compile,打包阶段做了exclude操作。
system:和provided相同。不过被依赖项不会从maven仓库下载,而是从本地文件系统拿。需要添加systemPath的属性来定义路径。一般用于引用外部Jar包。
import:它只使用在<dependencyManagement>中,表示从其它的pom文件导入dependency的配置。