Maven

标题Maven介绍

Maven是Apache下的开源项目,是项目构建工、依赖(jar包)管理的工具

标题Maven优势

Maven开发的项目,由于不用在项目里导入jar包所以maven开发的项目所占的空间比一般开发项目所占空间小。
Maven优势实现技术:
Maven优势实现的核心是依赖管理和项目构建
依赖管理:在本地创建统一管理jar包的maven仓库,在项目中需要哪个jar包时就在配置文件中给出jar包的坐标,由maven自动引用。
项目构建:即就是说maven可以通过命令的方式来实现用eclipse等集成开发环境做到的编译、测试、部署等功能

标题Maven的安装和环境搭建

Maven安装就在Apache下载解压到指定目录即可
同时要配置maven所需的环境变量,特别注意maven需要JAVA_HOME的JDK环境变量

标题Maven仓库类型

*本地仓库(存在于程序员电脑上)
如果jar包在本地仓库没找到就到私服上寻找
*私服(存在与本地局域网内)
如果没有在私服上找到就到*仓库上寻找
**仓库(存在于互联网上,由Maven团队维护)
配置本地Maven仓库
在maven的conf文件夹下的setting.xml文件里设置
这里设置本地仓库的位置即可
Maven常用命令
*mvn clean:清除一个工程的class文件
*mvn compile:编译一个工程的源文件
*mvn package:将工程打包为war或者jar包,放到target文件夹下
*mvn test:执行工程的测试类,注意测试类的命名必须是xxxTest结尾
*mvn install:将Java工程打包为jar包放到本地仓库里

注意:这里的这些命令,当install执行后compile test package等命令全都要执行,当执行package命令时compile test等命令也会执行 ,当执行test命令时compile会执行;而出现这样的现象的原因是maven的生命周期

Maven的生命周期
Maven有三套生命周期,其中互相独立不影响
*CleanLifeCycle(清除生命周期)
clean
*defaultLifeCycle(默认生命周期)
compile test package install deploy
*SiteLifeCycle
Site
每套生命周期都提供了一些命令,而当每套的生命周期里的命令中后面的命令执行时在它前面的所有命令都要按顺序执行

jar包的依赖范围
特别要注意每个项目所依赖的jar包在maven里都有一个scope的属性即依赖范围
*compile即在编译、测试、运行都要这个jar包
*test:仅在测试是需要
*Provided:仅在编译、测试需要
*Runtime:仅在测试、运行需要
*System:仅在编译、测试需要

所谓的运行时需要是指项目发布到Tomcat上后如果Tomcat自带了一些jar包而项目又导入了这些jar包会让项目报错。所以对于Tomcat自带的jar包要设置其属性为provide即仅在编译和测试阶段要用,当打包后不会在包中加入这个jar包

Maven的传递依赖冲突
所谓的传递依赖是指:项目A依赖B,B依赖C(2.0)
项目A依赖D,D依赖C(3.0)
因为依赖导入了两个不同版本的C,造成了依赖冲突

解决办法:
1、Maven的第一定义者优先(在pom.xml中定义在前的jar包优先)
2、依赖路径近者优先(即直接依赖的jar包优先)
3、排除依赖,即排除不想使用的版本
4、版本锁定(推荐使用)

<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
</denpendencies>
</dependencyManagement>
<properties>
<spring.version>4.2.4RELEASE</spring-version>
</properties>

项目拆分和聚合
1、创建父工程
通过创建maven项目选择POM创建父工程,父工程只有POM.xml的配置文件用来定义子模块的依赖的jar包,子模块以后就继承父工程就可以了。同时父工程创建好了之后要发布到本地仓库里,因为将来子模块会被发布到本地仓库,如果父工程没在本地仓库那么就会报错。
2、分别创建子模块
2.1、dao模块
将dao相关的代码和配置文件放到dao模块中,其中对于spring配置文件可以进行分割,将spring配置文件里的基本信息提取出来applicationContext-basic.xml的基本配置文件
在这个配置文件里配置SqlSessionFactory、dataSource、事务
而对于dao对象的配置则提取出来形成一个applicationContext-dao.xml的配置文件。在里面仅配置dao的bean
2.2、service模块
创建原则一致就是把service相关的代码和配置文件放到service的模块里,由于service要引用dao接口,所以当dao模块创建好了之后就应该打jar包到本地仓库里,方便service模块的依赖引用,同理,service模块创建好之后也要打jar包到本地仓库方便web层模块的依赖调用

测试:记住当要分别测试每个子模块时当加载配置文件时,因为要加载其他模块的配置文件,这时应该批量加载本项目的配置文件和jar包下的配置文件

1、加载本项目下配置文件:
Classpath:spring\applicationContext-.xml
2、加载本项目和jar包下的配置文件
Classpath
:spring\applicationContext-*.xml

3、运行方式
1、通过父工程聚合子模块后,将web模块打成war包发布到Tomcat上执行项目
2、通过执行web子模块来执行项目
3、将web子模块部署到Tomcat上来执行

搭建私服

1、安装私服
解压压缩包、并以管理员的身份进入bin目录执行
Nexus install:安装私服
Nexus start:启动私服
通过查看其配置文件知道其访问私服的URL为8081/nexus
可以通过
用户名:admin
密码:admin123
登录
2、私服仓库类
1、Hosted:宿主仓库(本公司开发的jar包(测试版、正式版)、第三方jar包(有版权问题))
2、Proxy:代理仓库(*仓库和Apache下的一些测试jar包)
3、Group:组仓库(连接了宿主仓库和代理仓库)以后我们就连这个仓库

4、上传jar包到私服
配置maven程序的server配置
Maven
配置要上传到私服的工程的pom.xml中jar包上传的路径

<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>

执行命令发布项目到私服(上传)
*deploy
5、下载jar包到本地仓库
配置maven的配置
Maven
Maven