《Maven实战》 阅读笔记

无Maven不项目,这是我的口号,但是一直没有系统的去看书,前段时间把《Maven实战》过了一遍做了些笔记,方便后面查阅

每个项目都有自己的坐标

  • groupId
  • artifactId
  • version
  • packaging
  • classifier


    《Maven实战》 阅读笔记_第1张图片
    1.png
2.png
  • install 安装在本地
  • deploy 打包发布到远端

依赖范围

《Maven实战》 阅读笔记_第2张图片
3.png

范围类型有: 编译、测试、运行 三种classpath

  • compile,默认值,对编译、测试、运行三种classpath都有效;
  • test: 测试依赖范围,只对测试classpath有效,在编译主代码或者裕兴项目的使用是则无法使用此类依赖。
  • provided: 已提供依赖范围 只在编译和测试classpath有效,运行时无效。
  • runtime: 运行时依赖范围,对测试和运行classpath有效,编译无效;
  • system: 系统依赖范围,


    《Maven实战》 阅读笔记_第3张图片
    4.png

(如第三方给的jar包,且仓库中心又没有,可以使用system范围,如)


    org.jsoup
    jsoup
    1.0
    system
    ${project.basedir}/src/lib/jsoup-proxy.jar

  • import(Maven 2.0.0及以上):导入依赖范围。不会对三种classpath产生实际的影响;(不够严谨,类似complie还是什么?)


    《Maven实战》 阅读笔记_第4张图片
    5.png

传递性依赖

[图片上传失败...(image-592326-1560672958805)]

依赖调解

两个依赖关系
A->B->C->X(1.0)
A->D->X(2.0)
两个依赖都间接来到X,
maven引用原则(依赖调解(Dependency Mediation))

  • 第一原则:路径最紧者优先 即 x(2.0)会被使用

A->B->Y(1,0)
A->C->Y(2,0)

  • 第二原则: 在满足第一原则的前提下第一声明者优先(就近原则) 即 Y(2,0)会被使用

可选依赖

《Maven实战》 阅读笔记_第5张图片
7.png

[图片上传失败...(image-b3618b-1560672958805)]

9.png
《Maven实战》 阅读笔记_第6张图片
10.png

仓库的布局

12.png

生命周期

  • clean:清理项目


    《Maven实战》 阅读笔记_第7张图片
    13.png
  • default: 构建项目


    《Maven实战》 阅读笔记_第8张图片
    14.png
  • site: 建立项目站点


    《Maven实战》 阅读笔记_第9张图片
    16.png
《Maven实战》 阅读笔记_第10张图片
15.png

继承

正确的设置relativePath很重要


《Maven实战》 阅读笔记_第11张图片
17.png

可继承的pom元素


《Maven实战》 阅读笔记_第12张图片
18.png

依赖范围 import的用法


《Maven实战》 阅读笔记_第13张图片
19.png

插件跟依赖一样可以使用*Management来管理


《Maven实战》 阅读笔记_第14张图片
20.png

《Maven实战》 阅读笔记_第15张图片
21.png

反应堆

22.png
《Maven实战》 阅读笔记_第16张图片
23.png
24.png
《Maven实战》 阅读笔记_第17张图片
25.png

对于裁剪功能,需要用的时候可以查阅文档

测试

《Maven实战》 阅读笔记_第18张图片
26.png

27.png

跳过测试
mvn package -DskipsTests

《Maven实战》 阅读笔记_第19张图片
28.png
29.png
《Maven实战》 阅读笔记_第20张图片
30.png

注意:上述几种命令行动态指定测试类的方法都应该只是临时使用,如果长时间只运行项目的某几个测试,那么测试就会慢慢失去其本来的意义。

加入测试

《Maven实战》 阅读笔记_第21张图片
31.png

也可以使用excludes排除一些测试


《Maven实战》 阅读笔记_第22张图片
32.png

WEB应用

《Maven实战》 阅读笔记_第23张图片
33.png

版本号定义约定


34.png

[图片上传失败...(image-676088-1560672958805)]

Maven属性

内置属性:

${basedir} 标识项目根目录即包含pom.xml 文件的目录;
${version}标识项目版本;

POM属性:

  • ${project.artifactId} 对应了元素的值
  • ${project.build.sourceDirectory} 项目的主源码目录 默认src/main/java/
  • ${project.build.testSourceDirectory} 项目的测试源码目录,默认为src/test/java
  • ${project.outputDirectory} 项目主代码编译输出目录,默认为target/classes
  • ${project.testOutputDirectory}: 项目测试代码编译输出目录 ,默认为target/testclasses/
  • ${project.groupId}: 项目的groupId
  • ${project.artifactId} 项目的artifactId
  • ${project.version} 项目的version 与${version}等价
  • ${project.build.finalName} 项目打包输出文件的名称,默认为${project.artifactId}-${project.version}

自定义属性

可以通过val

Setting属性

36.png

Java属性变量

[图片上传失败...(image-d9785b-1560672958805)]

环境变量属性

38.png

最佳实践

  • artifactId 使用实际项目名称作为artifactId的前缀
  • 优化依赖: 使用 dependency:listdependency:tree 来查看依赖关系
  • mvn clean install 在执行真正的项目构建之前清理项目是一个很好的实践

你可能感兴趣的:(《Maven实战》 阅读笔记)