各位读者朋友好,我是你们的好朋友IT黑铁,经过一段时间的学习,我这一次给大家分享Maven和Git的学习经验,如若有错还望指出,大家共同探讨!!
学习资料来源于黑马程序员的b站视频,下面附上链接,有需要的朋友可以查看。
Maven:黑马程序员Maven全套教程,maven项目管理从基础到高级,Java项目开发必会管理工具maven_哔哩哔哩_bilibili
Git:https://www.bilibili.com/video/BV1MU4y1Y7h5?p=1
Maven (一)解决问题:--依赖第三方资源的版本冲突。
--工程整体升级维护发布等过程的操作繁琐
(二)Maven是什么?Maven是一个项目工程管理工具,将项目开发和管理过程抽象一个抽象模型(POM—项目对象模型)
(三)Maven的作用
---项目构建:提供跨平台、标准的自动化项目构建方式
---依赖管理:方便快捷的管理项目依赖的资源,避免资源间的版本冲突问题
---统一开发结构:提供标准的、统一的项目结构
(四)Maven的基本事项---Maven基于Java语言,需要使用jdk,高级环境变量里设置Java的属性,而Maven只需配置MAVEN_HOME、Path。(带有_HOME的均配置为安装目录,Path为%XX_HOME%\bin)
---坐标:Maven中的坐标用于描述仓库中资源的位置(https://repo1.maven.org/maven2/)
Maven坐标主要组成:
groupId:定义当前Maven项目隶属组织名称(通常是域名反写)
artifactId:定义当前Maven项目名称(通常是模块名称)
version:定义当前项目版本号
package:不写默认打jar包,使用jsp技术打war包,html之类可选jar包。
properties:定义自定义属性
---中央仓库官网:(https://mvnrepository.com)
---Maven系统配置文件(settings.xml)设置:
*更改本地仓库默认位置
*设置镜像仓库(当访问中央仓库时访问阿里云)
*用户settings:将一个用户settings.xml放在本地仓库父目录下,不一样的话局部setting将会覆盖全局setting(conf目录里的setting)。
---Pom文件标签属性:
<modelVersion>---项目对象模型版本非maven版本
<name>---项目名称
<description>---项目描述
<profile>多环境开发
<id>
<properties>环境中使用的属性值
<activation>默认启动
<activeByDefault>
<dependency>---依赖jar包
Maven坐标
scope依赖范围
configuration(对应资源的配置属性,例tomcat的port,path)
<build>
<plugin>
插件坐标
configuration(对应资源的配置属性,例tomcat的port,path)
<resource>src资源
<directory>(设定配置文件对应的位置目录,支持使用属性动态设定路径)
<filtering>是否开启对管理资源的加载过滤
<testresources>测试资源
<distributionManagement>发布配置管理
<repository>realease仓库
<id>settings.xml私服仓库ID
<url>私服网址
<snapshotRepository>snapshot仓库
---mvn命令:
生命周期命令:mvn 生命周期
创建模板工程命令:
、--- 依赖管理
依赖具有传递性:直接依赖和间接依赖。
依赖传递冲突:与树一样的层级关系
路径优先(当依赖中出现相同资源时,优先层级越浅,优先级越高。)
声明优先(当资源在相同层级被依赖时,配置顺序靠前的覆盖配置顺序靠后的)
特殊优先(当同级配置了相同资源不同版本,后配置的覆盖先配置的)
排除依赖与可选依赖:
optional(在原依赖项目中配置,不让别人发现)
exclusion(在自己的项目中配置,排除指定依赖)
依赖范围:
间接依赖后:
---项目构建与生命周期
clean生命周期
default构建生命周期
valitdate(校验)
initialsize(初始化)
package(打包)打包到当前项目目录下
install(上传)上传到本地仓库
verify(验证)
deploy(部署)上传到私服仓库中
site构建生命周期
添加所需生命周期插件(Maven官网插件里找)
(四)分模块开发与设计
目的:分工明确,提高开发效率,降低耦合度。
实现细节:模块中仅包含当前模块对应的功能类与配置文件
spring核心配置根据模块功能不同进行独立制作
当前模块所依赖的模块通过导入坐标的形式加入当前模块后才可以使用
Web.xml需要加载所有的spring核心配置文件
(五)模块聚合解决问题:统一更新操作各模块的生命周期,方便操作。
具体操作:
(六)版本管理
属性及引用格式:自定义属性--${属性名}
内置属性--${project属性名}(project可省)
Setting文件属性:${settings.属性名}
Java系统属性:
${java.runtime.name}(System.getProperties或mvn help:system查询)
环境变量属性:${env.JAVA_HOME}(查询方式与上相同)
继承:
解决问题:各依赖模块之间的版本管理问题
具体操作:
注意:version一般使用自定义属性,方便修改!
版本管理:
(七)其他资源属性值的共享
目的:其他模块下的配置资源读取父模块下的属性值。
具体操作:先自定义属性和resource设置目录和过滤后(可使用内置属性basedir),其他模块下的资源通过${属性名}引用
(八)多环境开发配置目的:在不同环境场景下使用不同的配置
具体操作:先使用profile标签定义完毕后,可以使用actication标签默认启动也可以使用mvn install -P 环境ID
(九)跳过测试解决问题:由于不可抗力问题导致的跳过某些测试或是所有测试。
具体操作:
第一种:
第二种:
第三种:
(十)私服制作
Nexus---Sonatype公司的一款maven私服产品
网址Download (sonatype.com)
操作流程:访问服务器,在work目录下找到密码admin文本登录,登录后可创建一个宿主仓库,创建仓库后,将需要的仓库都放到群组仓库中,方便获取。
IDEA访问私服:下载每个项目的本地仓库相同,在本地仓库配置一次就行。
IDEA私服上传:上传在每个项目中不同,需在不同的pom文件中配置。
Git (一)解决问题:
---回溯项目版本(代码还原)
---备份
---协同开发
---追溯问题代码编写人和时间
---团队作战
---清晰看到每个功能变化,切换方便
---导入项目方便
(二) 版本控制历史集中式版本控制工具:SVN和CVS
分布式版本控制工具:Git(linus开发的)
Git特点:
(三) 工作流程 (四)组成
Git GUI:Git提供的图形界面工具
Git Bash:Git提供的命令行工具(小型的linux命令窗口)
标识用户:
用户名:git config –global user.name “itdaling”
邮箱:git config –global user.email “xxx@xxx”(不要求真实存在)
查看配置信息:
git config --global user.name
git config --global user.email
命令别名:解决常用不变命令过长的问题
创建.bashrc文件(由于有时win不允许创建.开头的,使用touch ~/.bashrc)
内容:alias git-log=’git log –pretty=online –all -graph –abbrev-commit’ 用于输出git提交日志
alias ll =’ls -al’ 输出当前目录所有文件及基本信息。
乱码问题:
Git基本操作
*创建仓库:在任意空目录下作为本地Git仓库,打开Bash用git init完成创建,生成一个隐藏.git目录。
*文件修改状态过程图:
git add---(工作区->暂缓区) 单个文件名|通配符(.)
git commit---(暂缓区->本地仓库) -m “备注信息”
git status---查看修改文件的状态
git log[option]:
options
--all 显示所有分支
--pretty=online 将提交信息显示为一行
--abbrev-commit 使得输出的commitId更简短
--graph 以图的形式显示
git reset –hard commitID:根据git-log或git log获得id进行版本回退
git reflog:查看已经删除(指回退版本非物理删除)的记录
*忽略不受git管理:工作目录下创建一个.gitignore的文件写文件名(支持通配符和逻辑运算符,例*.a !lib.a)。
git branch---(查看所有分支,-vv查看分支绑定关系) 分支名 (创建一个分支)
git checkout 分支名---(切换分支) -b 分支名(创建并切换分支)
git merge 分支名称---(将当前分支合并到其他分支)
git branch -d 分支名---(做检查删除其他分支,不能删除当前分支)
git branch -D 分支名---(不做检查强制删除)
解决冲突:分支合并时俩分支修改了同一文件导致不合,通过手动改动后再次合并。
分支开发规范:
快进模式:当要合并的分支内容包含当前分支,即可直接将当前分支变成合并分支。
git remote add orign(非必须但规范)远程仓库ssh地址
git remote 查看所有远程仓库
git push [-f] [--set-upstream] [远端名称[本地分支名][:远端分支名]]---推送(当本地分支名和远端分支名相同时,可以只写一个)(-f表示本地与远端冲突时,强制覆盖)(--set-upstream设置绑定关系,绑定后可直接git push)
git clone 仓库路径 本地仓库名(不指定默认)---克隆(不频繁)
git fetch 远端分支名 本地名(不会进行合并,不指定远程名称和分支名就抓取所有分支)---针对新增加的更改
git pull 远端分支名 本地名(fetch+merge)
解决远程冲突:先pull修改冲突文件后再push
远程仓库代码托管平台:GitHub、码云、GitLab。
GitHub:(https://github.com/)国外网站。
码云(Gitee):(https://gitee.com/)国内网站
GitLab:需要自己部署,企业使用。
获取SSH公钥:ssh-keygen -t rsa(不断回车,存在即覆盖),生成完毕后打开文件获取,cat ~/.ssh/id_rsa.pub,验证是否配置成功,ssh -T git@gitee.com。
IDEA操作Git注意:idea中未暂存和已暂存分为一类,未跟踪为另外一类。
每切换分支前一定要进行commit!!!
可以将terminal配置成git bash。
Maven和Git区别相同词:管理、版本、本地/远程仓库
不同:
Maven:管理项目的生命周期和依赖资源。划分一个项目的生命周期,统一项目依赖资源的管理方式,规定项目的构建方式,解决依赖资源的冲突问题,实现多平台间灵活的管理方案。本地仓库存储依赖资源,远程仓库存放公共资源,一般本地仓库资源通过坐标从远程仓库获取。
Git:提供一套代码版本管理服务,分布式地在本地拥有一套自己的代码库,也称本地仓库。规定文件的修改流程,每个提交操作拥有一个唯一版本号的机制,实现代码回溯查询功能。独特分支管理机制,分支合流、分支备份、分支修改操作具现了企业分支开发规范,并且在团队合作中,合并代码显得更加快捷和安全,本地仓库代码推送到远程代码托管平台的仓库,远程仓库也同样克隆或抓取到本地仓库,快速的实现获取其他成员的代码。
总结:Maven实现对项目的开发管理和依赖资源的版本管理,Git实现团队开发的代码修改版本更新管理,二者用途不同。