Maven和Git
阅读提示
这页建议按“Maven 基础 -> 常用命令 -> 依赖机制 -> Git 实战”顺序复习。
面试时优先说你在项目里的真实使用场景,不要只背概念。
Maven&Git(了解)
1、Maven 是什么?
Maven 主要服务于基于 Java 平台的项目构建、依赖管理和项目信息管理。
Maven 的主要功能主要分为 5 点:
- 依赖管理系统
- 多模块构建
- 一致的项目结构
- 一致的构建模型和插件机制
2、Maven 常用命令
mvn archetype:create:创建 Maven 项目。mvn compile:编译源代码。mvn deploy:发布项目。mvn test-compile:编译测试源代码。mvn test:运行应用程序中的单元测试。mvn site:生成项目相关信息的网站。mvn clean:清除项目目录中的生成结果。mvn package:根据项目生成的 jar/war 等。mvn install:在本地 Repository 中安装 jar 。mvn eclipse:eclipse:生成 Eclipse 项目文件。mvn jetty:run启动 Jetty 服务。mvn tomcat:run:启动 Tomcat 服务。mvn clean package -Dmaven.test.skip=true:清除以前的包后重新打包,跳过测试类。用到最多的命令mvn eclipse:clean:清除 Project 中以前的编译的东西,重新再来。mvn eclipse:eclipse:开始编译 Maven 的 Project 。mvn clean package:清除以前的包后重新打包。
3、Maven能解决什么问题?为什么要用?
在没有使用Maven的情况下,开发应用时需手动确定引入哪些第三方JAR包,然后去查找这些JAR包并将它们手动导入到项目中。同时,处理各个JAR包之间的兼容性和冲突问题是一项繁琐的任务。
完成JAR包的配置后,想要将应用打包成WAR包同样需要进行复杂的操作。整个应用的编译、测试和部署流程都显得特别繁杂。
然而,引入Maven后,这些问题迎刃而解。Maven是专为Java项目设计的管理和构建工具,其主要功能包括:
- 提供了一套依赖管理机制,简化了JAR包的引入和解决冲突的过程。
- 提供了标准化的构建流程,包括编译、测试、打包、发布等步骤。
- 定义了一套标准化的项目结构,使得项目组织更加清晰有序。
4、依赖的解析机制是什么呢?
- 当依赖的范围是
system的时候,Maven 直接从本地文件系统中解析构件。 - 根据依赖坐标计算仓库路径,尝试直接从本地仓库寻找构件,如果发现对应的构件,就解析成功。
- 如果在本地仓库不存在相应的构件,就遍历所有的远程仓库,发现后,下载并解析使用。
- 如果依赖的版本是
RELEASE或LATEST,就基于更新策略读取所有远程仓库的元数据文件(groupId/artifactId/maven-metadata.xml),将其与本地仓库的对应元合并后,计算出RELEASE或者LATEST真实的值,然后基于该值检查本地仓库,或者从远程仓库下载。 - 如果依赖的版本是
SNAPSHOT,就基于更新策略读取所有远程仓库的元数据文件,将它与本地仓库对应的元数据合并,得到最新快照版本的值,然后根据该值检查本地仓库,或从远程仓库下载。 - 如果最后解析得到的构件版本包含有时间戳,先将该文件下载下来,再将文件名中时间戳信息删除,剩下
SNAPSHOT并使用(以非时间戳的形式使用)。
5、jar包和war包有什么区别?
JAR包(Java Archive)和WAR包(Web Application Archive)都是Java中用于打包和部署应用程序的归档文件,但它们有不同的用途和特点:
- JAR包(Java Archive):
用途: 主要用于打包Java类、资源文件和库,通常用于独立的Java应用程序或Java库的发布。
结构: JAR包可以包含Java类、资源文件、配置文件和其他依赖的库(JAR文件)。
执行方式: JAR包通常以可执行的形式运行,其中包含一个
MANIFEST.MF文件,指定了可执行类。部署: JAR包可以通过
java -jar命令执行,也可以作为库被其他Java项目引用。WAR包(Web Application Archive):
用途: 用于打包和部署Web应用程序,包含Web应用所需的所有资源,例如Servlet、JSP、HTML、CSS、JavaScript等。
结构: WAR包包含Web应用的目录结构,通常包括
WEB-INF目录、WEB-INF/lib目录(用于存放依赖的JAR文件)和WEB-INF/classes目录(用于存放编译后的Java类)。执行方式: WAR包通常被部署在支持Servlet规范的Web容器(如Tomcat、Jetty)中,并由容器负责执行。
部署: WAR包通过将其复制到Web容器的指定目录进行部署,容器会自动解压并运行其中的Web应用。
总结:
- JAR包主要用于打包和部署独立的Java应用程序或库。
- WAR包主要用于打包和部署Web应用程序,包括Web应用所需的所有资源。
- JAR包通常以可执行的形式运行,而WAR包被部署在Web容器中执行。
6、如何解决Git冲突?
1、git冲突的场景
- 情景一:多个分支代码合并到一个分支时;
- 情景二:多个分支向同一个远端分支推送代码时;
实际上,push操作即是将本地代码merge到远端库分支上。
关于push和pull其实就分别是用本地分支合并到远程分支 和 将远程分支合并到本地分支
所以这两个过程中也可能存在冲突。
git的合并中产生冲突的具体情况:
- 两个分支中修改了同一个文件(不管什么地方)
- 两个分支中修改了同一个文件的名称
两个分支中分别修改了不同文件中的部分,不会产生冲突,可以直接将两部分合并。
2、冲突解决方法
- 情景一:在当前分支上,直接修改冲突代码--->add--->commit。
- 情景二:在本地当前分支上,修改冲突代码--->add--->commit--->push
注:借用vim或者IDE或者直接找到冲突文件,修改
