一、Maven简介
Maven是apache下的一个开源项目,是纯java开发,并且只是用来管理java项目的。
二、Maven的优点
0)节省空间:对jar包做了统一管理、依赖管理,项目里无需放jar包
1)一键构建:自带tomcat,可以单独运行
2)可跨平台:纯java开发
3)应用在大型项目可提高开发效率:分模块开发
互联网项目:按业务分
传统项目:按层分 entity dao service web
三、依赖管理
四、项目一键构建
编码>>>编译>>>测试(junit)>>>运行>>>打包>>>部署
一个tomcat:run就能把项目运行起来
Maven能干的事:
编译>>>测试(junit)>>>运行>>>打包>>>部署
五、Maven的安装配置
http://maven.apache.org/download.cgi 下载相应压缩包
直接解压到一个没有中文没有空格的文件夹里解压后的目录如下:
Maven软件的核心文件:
六、Maven环境变量配置
要配置jdk,maven3.3.9这个版本所需的jdk版本必须要1.7以上
最终要运行的是maven软件中bin目录的mvn命令
所以要配置maven的环境变量
在系统变量添加
环境变量的名称:MAVEN_HOME
变量值:就是maven软件解压的目录F:class32apache-maven-3.3.9
把MAVEN_HOME添加到path里
验证maven是否配置成功:
打开dos窗口 输入: mvn –v
七、Maven仓库
三种仓库
1)本地仓库(自己维护)
本地仓库的配置只需要修改settings.xml文件就可以
2)远程仓库(私服) 公司维护
3)中央仓库,maven团队维护两个亿的jar
三种仓库的关系如下:
八、Maven的目录结构
九、Maven的常用命令
Clean:清理编译的文件
Compile:编译了主目录的文件
Test:编译并运行了test目录的代码
Package:打包
Install:就是把项目发布到本地仓库
Tomcat:run一键启动
十、Maven的生命周期
Compile>>>test>>>package>>>install>>>deploy(发布到私服)
三种生命周期:
1)Clean生命周期
Clean
2)Default生命周期
Compile>>>test>>>package>>>install>>>deploy
3)Site生命周期
Site
命令和生命周期的阶段的关系:
不同的生命周期的命令可以同时执行
Mvn clean package
依赖范围:
Compile,如struts2 框架jar
Provided,如jsp-api.jar 重点
Runtime,如数据库驱动包
Test,如junit.jar
compile:默认值,适用于所有阶段(表明该jar包在编译、运行以及测试中路径俊可见),并且会随着项目直接发布。
provided:编译和测试时有效,并且该jar包在运行时由服务器提供,如servlet-api。
runtime:运行时使用,对测试和运行有效,如jdbc。
test:只在测试时使用,在编译和运行时不起作用,发布项目时没有作用。
system:不依赖maven仓库解析,需要提供依赖的显式的置顶jar包路径,对项目的移植来说是不方便的。
依赖传递:
例:只添加了一个struts2-core依赖,发现项目中出现了很多jar。
十一、依赖版本冲突的解决
0)第一声明优先原则
<dependencies>
<!-- spring-beans-4.2.4 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.2.4.RELEASE</version>
</dependency>
<!-- spring-beans-3.0.5 -->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-spring-plugin</artifactId>
<version>2.3.24</version>
</dependency>
1)路径近者优先原则
自己添加jar包
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.2.4.RELEASE</version>
</dependency>
2)排除原则
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-spring-plugin</artifactId>
<version>2.3.24</version>
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
</exclusion>
</exclusions>
</dependency>
3)版本锁定原则
<properties>
<spring.version>4.2.4.RELEASE</spring.version>
<hibernate.version>5.0.7.Final</hibernate.version>
<struts.version>2.3.24</struts.version>
</properties>
<!-- 锁定版本,struts2-2.3.24、spring4.2.4、hibernate5.0.7 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
十二、搭建私服(nexus)
0)安装nexus
1)启动服务
2)启动失败的解决方法
3)登录nexus
用户名/密码:admin/admin123
4)仓库类型
Virtual:虚拟仓库
Proxy:代理仓库
Hosted:宿主仓库 本地仓库
Group:组
十三、上传下载DAO
0)上传dao
第一步: 需要在客户端即部署dao工程的电脑上配置maven环境,并修改 settings.xml 文件,配置连接私服的用户和密码 。
此用户名和密码用于私服校验,因为私服需要知道上传者的账号和密码是否和私服中的账号和密码一致。
<server>
<id>releases</id>
<username>admin</username>
<password>admin123</password>
</server>
<server>
<id>snapshots</id>
<username>admin</username>
<password>admin123</password>
</server>
第二步: 配置项目pom.xml
配置私服仓库的地址,本公司的自己的jar包会上传到私服的宿主仓库,根据工程的版本号决定上传到哪个宿主仓库,如果版本为release则上传到私服的release仓库,如果版本为snapshot则上传到私服的snapshot仓库
<distributionManagement>
<repository>
<id>releases</id>
<url>http://localhost:8081/nexus/content/repositories/releases/</url>
</repository>
<snapshotRepository>
<id>snapshots</id>
<url>http://localhost:8081/nexus/content/repositories/snapshots/</url>
</snapshotRepository>
</distributionManagement>
注意:pom.xml这里的<id> 和 settings.xml 配置的 <id> 对应!
第三步:执行deploy命令发布到私服
1)下载dao
第一步:修改settings.xml
<profile>
<!--profile的id-->
<id>dev</id>
<repositories>
<repository>
<!--仓库id,repositories可以配置多个仓库,保证id不重复-->
<id>nexus</id>
<!--仓库地址,即nexus仓库组的地址-->
<url>http://localhost:8081/nexus/content/groups/public/</url>
<!--是否下载releases构件-->
<releases>
<enabled>true</enabled>
</releases>
<!--是否下载snapshots构件-->
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<!-- 插件仓库,maven的运行依赖插件,也需要从私服下载插件 -->
<pluginRepository>
<!-- 插件仓库的id不允许重复,如果重复后边配置会覆盖前边 -->
<id>public</id>
<name>Public Repositories</name>
<url>http://localhost:8081/nexus/content/groups/public/</url>
</pluginRepository>
</pluginRepositories>
</profile>
<activeProfiles>
<activeProfile>dev</activeProfile>
</activeProfiles>
第二步:删除本地仓库中的dao
第三步:update service工程,出现以下信息说明下载成功