《maven实战》读书笔记

284 阅读3分钟
好脑子不如烂笔头,一边读书、一边笔记,方便日后快速回忆

一、maven介绍

  1. maven是优秀的项目构建工具
  2. maven还是优秀的项目依赖管理工具 ,jar版本管理、私库、中央仓库

maven构建优点

  1. 脚本构建费时费力
  2. IDE构建过程相互独立,重复点击
  3. Makefile 无法实现跨平台、语法学习成本
  4. Ant java的Make ,无法实现依赖管理
  5. maven解决了上述缺点

二、 maven安装

安装jdk、安装maven,配置环境变量

目录分析

bin:mvn命令
boot:maven自定义类加载器
conf/settiing.xml:maven的重要配置,mirror、repository、plugins等
lib:maven各个模块的jar包,其中含有super pom
mvn help:system 命令:下载maven-help-plugin,打印本地各种环境变量,插件目录${user_home}/.m2/repository/org/apache/maven/plugins

http代理设置

  1. ping repo1.maven.org检测和中央仓库的连通性
  2. 通过setting.xml的<proxy>标签设置代理meta信息,具体配置demo随便网上搜
  3. eclipse、netbean安装,目前主要使用idea,跳过
  4. maven命令实际上java程序,可以像设置jvm参数那样设置maven的运行参数,保证maven运行时内存溢出问题,MAVEN_OPTS = -Xms=128m -Xmx=512m
  5. setting.xml分为全局的.m2/setting.xml 和 ${M2_HOME}/conf/setting.xml,推荐使用后者
  6. 不必使用ide自带的内嵌mvn

三、maven使用

编译

一个简单pom文件编写
一个简单hellowrold java代码编写,src/main/java
Mvn clean compile:编译上述代码

测试

需要在pom文件的dependency引入junit,scope会设置为test,dependency默认值是compile
编写测试代码src/test/java
Mvn clean test运行测试用例
运行失败,需要pom文件配置编译plugin,maven-compiler-plugin

打包运行

Mvn clean pacakge
Maven 默认的打包类型是jar
Maven clean install :额外安装到本地仓库
生成可执行的jar包需要加载maven-shade-plugin插件,讲helloworld程序的main class 配置到manifest中

使用archetype生成项目骨架
Mvn archetype:generate

m2ecplise跳过 netbean mvn跳过

四、 背景案例

一个简单的账户系统,作为后续maven演示的素材

五、 坐标和依赖

坐标

groupid:项目名
aritifactid:模块名
version:版本
packaging:打包方式,jar、war
classifier:附属构件java-doc/source-jar

依赖的配置dependency

type默认为jar
Scope:依赖范围
Optional:
exclusiion:排除依赖传递

依赖范围scope

classpath三种类型:编译classpath、测试classpath、运行classpath
scope就是控制依赖和上述三种classpath关系
Compile:编译
Test:测试
Provided:=compile+test
Runtime:测试+运行有效,编译无效,如jdbc
System:和provided一样,不同是需要显式指定本地依赖路径
import:不会影响三种classpath,待第八章详解

依赖传递性

传递性依赖,依赖范围scope在传递过程中可能会变化

依赖调解:主要是不同传递路径中的版本冲突
路径最近为第一原则
第一声明者优先
optional可选依赖,在依赖传递中不会传递,实际使用中尽量避免,可选依赖问题可拆为两个pom module解决
排除依赖:<exclusion>标签使用
归类依赖:<properties>标签把版本号抽出来
依赖优化
mvn dependency:list 显示所有依赖


mvn dependency:tree 显示依赖树
mvn dependency:analyze: 依赖分析


六、 maven仓库

仓库作用:避免各个项目lib目录下存储大量相同的jar包
仓库布局:使用groupid、aritifactid、version等构成构件在仓库中的存储路径
仓库分类:本地仓库、远程仓库(中央、私服、其他)
本地仓库默认路径 .m2/repository,可在setting.xml自定义,通过<localRepository>标签
Mvn clean install 可以将本地构件引入本地仓库
中央仓库地址写死在super pom中:$M2_HOME/lib/maven-builder-3.0.jar 不同maven版本可以是不同jar包 org/apache/maven/model/pom-4.0.0.xml
私服:nexus,加快下载,存放公司内部组件
其他仓库配置:JBoss、认证
部署project到远程仓库:pom <distributionManagement> 同时setting.xml配置好认证信息,mvn clean deploy
快照的作用,组织内部可以随时获取最新快照(基于时间戳),外部提供稳定版本
镜像:为国内用户提供更快的下载速度,settings.xml配置
仓库搜索:有很多,如:mvnrepository.com/