Maven学习

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Maven学习相关的知识,希望对你有一定的参考价值。

maven介绍

Maven是Apache下的一个开源项目,它是一个项目管理工具,它用于对java项目进行项目构建、依赖管理及项目信息管理。Maven包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。

maven是一个专业项目构建工具,将项目构建的过程进行规范统一,开发人员和测试人员都使用maven进行构建。

maven定义一套规范依赖管理,通过定义jar包的坐标(一个坐标对应一jar包)通过maven自动将jar从互联网下载到本地,加入工程。

可以将各各模块定义成单独的工程,将各各模块java源代码编译成一个jar包,发布maven的仓库中,各各去使用jar包通过坐标自动将jar下载到本地。

其中一个模块开发人员,只会维护模块的代码,通过maven的依赖管理将jar下载到工程中,jar包中代码不用编译了,省时间了。
要运行整个工程,创建一个父工程,聚合各各模块工程,父工程自动判断各各模块的依赖关系,最终打成一个war包,自动运行。

 

maven安装配置

目录说明:

技术分享

bin:maven的运行脚本
    mvn.bat 用于windows,
    mvnDebug,用户于调试工程,可以打断点
boot:maven的类加载器
conf:配置文件
    settings.xml 配置mven仓库、私服

lib:maven运行依赖的jar

环境变量配置:

技术分享 技术分享

本地仓库配置

当maven去运行工程时,maven依赖插件,maven从互联网下载插件的jar包,如果在本地仓库有,不从互联网下载,如果本地仓库没有从互联网下载,将下载后jar放在本地仓库。

修改setting.xml配置本地仓库地址:

技术分享

如果不配置本地仓库,本地仓库的地址在 c盘下用户/.m2
比如:C:\\Users\\Administrator\\.m2\\repository

 

maven入门程序

eclipse插件配置

技术分享

setting.xml文件配置

技术分享

maven仓库视图

技术分享     技术分享

创建maven工程

选择骨架

技术分享

技术分享

技术分享

maven标准目录结构:

/src/main/java ----存放java源代码,是主程序非测试程序代码,最终会打到工程的jar中。
/src/main/resources ---存放主体程序的配置文件
/src/test/java -----存放java源代码,只是测试程序代码 --最终不会打工程的jar包中。
/src/test/resources---测试程序需要的配置文件

常用maven命令:

Run as 采用 mvn 命令运行 ,Debug as 采用 mvnDebug 命令运行
Maven build 使用之前操作过的命令
Maven build … 手动输入命令内容
Maven clean 执行清除命令
Maven install 执行安装命令
Maven test 执行测试命令

maven依赖管理

仓库管理

maven提供了一套依赖管理机制,通过在pom.xml定义坐标,通过坐标从互联网的中央仓库下载依赖的构件(jar包),规范去管理依赖所有构件。

技术分享

本地仓库-----》私服 -----》 中央仓库
(私服具有连接中央仓库代理权, 私服会自动连接中央仓库下载 )

pom.xml

第一部分: POM Relationships 关系 (必须设置)
Coordinates 坐标: 在仓库中唯一标识项目位置三个参数
<groupId> 项目名称
<artifactId> 模块名称
<version> 版本号
Aggregation 聚合(多模块) : 将项目分解为多个不同模块
Inheritance 继承 : 项目之间继承,实现POM复用
Dependencies 依赖: 项目依赖另一个项目进行编译或者运行
第二部分: Project Information 项目信息
name :项目名称
desciption: 项目描述
第三部分: Build settings 构建配置(必须设置)
properties : 配置属性
build :构建项目需要插件配置 (重点,maven主要靠插件进行项目构建..)
packaging :打包方式 jar(将工程打成一个jar包)、war(将工程打成一个war包)、pom (工程为父工程时设置为pom,有子工程继承它)
reporting : 报表
第四部分: Build Environment 构建环境 (在依赖、构建、运行 生效配置 )
Distribution Management :版本锁定(解决依赖版本冲突的问题)
Profile : 灵活自定义配置,在特定情况激活

必须设置的内容:

技术分享

scop 依赖范围

技术分享

依赖传递:--版本锁定

使用哪个版本锁定义哪个版本
当锁定了版本,不管依赖多少层按照锁定的版本进行依赖。

在父工程中对所有子工程依赖的jar的版本进行锁定。
在pom.xml中配置dependencyManagement
不需要配置dependencies依赖,因为父工程没有java代码。技术分享

 

maven继承和聚合

何为聚合?
项目开发通常是分组分模块开发:
每个组维护一个maven工程只实现一个模块(模块采用工程的方法进行构建)
每个模块开发完成需要将模块聚合在一起运行:
比如:一个工程分类dao模块、service模块、action模块、pojo模块,整个工程运行需要将所有模块集成一个完整的 工程进行运行。
将模块工程化开发好处:
将每个模块打成一个jar 包,上传到仓库,其它模块引用只引用jar即可。维护模块的开发人员不需要编译其它模块的代码,效率高,减少bug率。
聚合的方法:
定义一个父工程,定义坐标时,<packaging> 是pom,通过父工程将所有子工程进行聚合。
定义若干个子工程(每个子工程对应一个模块),需要继承父工程。

何为继承
继承为了消除重复,我们把很多相同的配置提取出来,子模块继承父模块

技术分享

将ssh整合工程拆分 成如下工程:
parent:父工程
作用:聚合各各子工程
ssh-web:web工程
作用: http 的请求和响应,使用struts2
ssh-service:service工程
作用:业务逻辑接口实现
ssh-dao:dao工程
作用:提供数据库dao接口
分析子工程的依赖关系:
ssh-web:
依赖ssh-service
依赖struts2
ssh-service:
依赖ssh-dao
ssh-dao:
依赖hibernate
依赖spring
parent:父工程
parent:父工程

maven私服

在公司 局域网环境专门有一台服务器,存储了很多jar包,供公司内部开发团队使用。
连接私服流程:本地工程的依赖先从本地仓库找,如果找不到从私服找,如果私服找不到,从中央仓库找,找到之后将jar放在私服中,本地仓库从私服下载下来。
私服中存的:从中央仓库下载的,还有公司内部开发的jar包。



































































以上是关于Maven学习的主要内容,如果未能解决你的问题,请参考以下文章

Maven发布:准备失败,必须指定“scm connection或developerConnection”

Maven学习笔记3:在idea中使用Maven

yarn android 错误“您必须为 Maven 存储库指定 URL”但它已经设置了吗?

将文件读入 Maven 属性

maven设置------settings.xml文件学习

maven设置------setting.xml文件学习