MAVEN的核心是pom.xml,pom定义了项目的基本信息。
maven的坐标:maven世界中拥有大量的构件,为每一个构件都定义了唯一的坐标标识。
定义一个项目的基本坐标,需要:
groupId(定义了项目隶属的实际项目),
artifactId(定义了当前maven在组中的唯一id),
version(定义了当前项目的版本),(以上为必写)
package(定义了打包方式)默认为Jar,(可选)
classifier(帮助定义构建输出的一些附属构件)(不可以直接定义)
scm 使用来to commit the modified sources 应该是用来获取资源,更新版本的
extensions used for the transport of artifact between repositories, and plug-ins which provide lifecycle enhancements.
配置依赖:
groupId,artifactId,version
type:依赖的类型,对应于package,默认为Jar
scope:依赖的范围
optional:标记依赖是否可选
exclusions:排除传递性依赖
依赖范围:
编译的时候用一套classpath(叫编译classpath)
测试的时候用一套classpath(叫测试classpath)
运行的时候用一套classpath(叫运行classpath)
依赖范围就是用来控制依赖与这三种范围的关系:
compile 默认的范围,对编译,测试,依赖都有效
test 只对测试classpath有效
provided 对编译和测试classpath有效
runtime对运行时classpath有效
system 系统依赖范围,范围和provided一样,是根据本地系统绑定的,所有可移植性可能不会很好
传递依赖
当第二直接依赖为compile时,传递依赖范围为第一依赖的范围
当第二直接依赖为test时,依赖不会传递
当第二直接依赖为provided时,只会传递Privide依赖
当第二直接依赖为runtime时,传递依赖范围为第一依赖的范围
依赖调解:
1.路径最近者优先
2.第一声明者优先
可选依赖:
当2个依赖不可以共存的是,可用可选依赖
<optional>true<optional>
<optional>false<optional>