maven教程3-坐标和依赖

一、坐标组成
1、groupId
一般是com.company.项目名称
2、artifactId
项目模块名称,建议使用 项目名称-模块名称
3、version
版本,分快照版本和发布版本
4、packaging
打包目标,可以是jar和war,可选,默认是jar
5、name
一般和模块名称相同即可
5、classifier
用于帮助生成一些辅助组件,如doc和source。不能自定义,需要由插件生成

install之后,生成 com.company.项目名称.模块名称.version文件夹
在文件夹里面,生成的文件名称是模块名称-version

二、依赖组成
groupid,artifactId,version此处不再介绍
1、type
表示依赖的项目的类型,可以是jar或者war。默认是jar
2、scope
编译范围。


 maven为compile,test,run三个指令维护了三个classpath。标记为compile的依赖项会都加入以上的三个classpath中,compile也是默认的选项。test,只对test的classpath选项有效,如junit。在源代码中使用该依赖项会抛出ClassNotFound异常。
provided表示该在运行时无效,表示在运行时环境中已经提供了该jar包,在运行的时候就不用再提供了。
runtime表示编译时不需要。如jdbc,在jdk已经定义了该接口,但是在运行时需要第三方数据库提供驱动(原理在于类加载的时候的解析步骤)
system和provided类似
还有一个import类型,这个之后的话题中会讲解
3、optional
可选的依赖。参考下边的可选的依赖
4、exclusions
排除得依赖。参考下面的排除得依赖
三、依赖传递
我们知道,被依赖的构件,里边也有pom文件,该pom文件描述了该构建本身需要依赖的其他构建。我们称当前构建A依赖其他构建B为第一直接依赖,
其他构件B本身依赖的构件C称为第二直接依赖。A对c的依赖称为依赖传递。虽然称之为传递,其实到了项目编译的时候,所有需要到的构建都是 平行的。

 
 1、compile-compile = compile
所谓的编译其实就是符号的引用,符号会在类加载过程中被解析成实际的运行时地址。compile表示编译时需要符号应用,运行时需要加载你的类。
A需要B在编译时和运行时都存在,B需要C在编译时和运行是都存在,那么A就需要C在编译时和运行时存在。
2、compile-test =  --
--表示无依赖。A需要使用B构建,但是不需要对B进行测试,所以A对C无依赖
3、compile-provided = --
A需要B在编译时和运行时都存在,B只需要C在测试和运行时存在。A不需要对B测试,那么测试可以排除。A在编译时只需要B的符号存在,所以不需要C参数编译,那么编译又排除了。
所以A对C无依赖。
4、compile-runtime = runtime
A需要B在编译时和运行时都存在,B需要运行时C存在,所以A只需要C在运行时存在即可。因为编译时B存在就行

四、依赖调解


五、可选的依赖
B在依赖C里面声明< optional >true< optional >表示该依赖可选,那么该依赖将不会具有传递性。
我们需要A在xml中直接声明依赖C。
六、排除依赖

 在依赖中,我们可以添加上面的标签,表示排除该被依赖构建开始之后的依赖链中所有和上述坐标一致的构建。此后该构将不会被传递
七、maven属性初步
在pom.xml中我们可以看到这么一个标签:
  1. <properties>
  2. <project.build.sourceEncoding>gbk</project.build.sourceEncoding>
  3. </properties>
 这就是maven属性标签,我们可以在文件其他地方是使用
${propertyName}来引用该属性的值


 使用该特性,我们可以批量的管理一个系列的构建的版本
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值