Git+Maven
一 Git
设置用户签名
git config --global user.name wcw
git config --global user.email 111@qq.com
1.1 Git常用配置
初始化本地库
git init
查看本地库状态
git status
添加暂存区
将本地文件添加到暂存区
git add 文件/目录
移出暂存区
移除暂存区、但文件依然存在于工作目录
git rm --cached 文件/目录
提交本地库
将暂存区的文件提交到本地库
git commit -m "版本信息" 文件/目录
查看提交版本
git reflog //查看版本信息
git log //查看详细的用户签名及其提交的版本信息
版本穿梭
git reflog //通过命令,查看版本号
git reset --hard 版本号 //版本穿梭
1.2 分支
查看分支
git branch -v
创建分支
git branch 分支名
切换分支
git checkout 分支名
合并分支
git merge 分支名 //将指定分支合并到当前分支
产生冲突
合并分支时,两个分支在同一个文件的同一个位置有两套完全不同的修改,Git无法替我们决定使用哪一个,必须人为决定新代码内容
1.3 远程仓库
创建别名
git remote -v //查看当前所有远程库别名
git remote add 别名 远程地址
本地库推送
git push 别名/git链接 分支名
克隆远程仓库到本地
git clone 仓库地址
配置Git忽略文件
创建~/xxx.ignore文件
# 所有.log文件都不用要
*.log
# 所有.idea文件都不用要
*.idea
二 Maven
pom.xml
gav --唯一定位一个maven项目
-
groupId: 组织id,一般域名倒写+项目名
-
artifactId:项目名称,也是模块名称对应groupId中项目中的子项目
-
version:项目版本号。通常在版本后带 -SNAPSHOT
-
name:项目的名称
packaging 项目打包类型
jar、war、rar、ear、pom(一般做父工程)。默认jar
properties
配置属性,项目源码编码方式等
<properties>
<!--源码编译jdk版本-->
<maven.compiler.source>1.8</maven.compiler.source>
<!--运行代码的jdk版本-->
<maven.compiler.target>1.8</maven.compiler.target>
<!--项目构建使用的编码,避免中文乱码-->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!--生成报告的编码-->
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>
relativePath
父项目的pom.xml文件的相对路径
插件plugings
maven功能:执行清理、编译、测试、报告、打包
-
clean插件
maven-clean-plugin:2.5
清除target目录 -
resources插件
maven-resources-plugin:2.6
把项目需要的配置文件拷贝到指定的目录,默认将src/main/resources目录下文件拷贝到classes目录下target/classes—>将配置文件加载到target -
compile插件
maven-compiler-plugin
执行前调用resources插件,将src/main/java源码编译成字节码文件生成class文件,再把编译好的class文件输出到target\classes目录下 -
test测试插件
把src\test\java下的代码编译成字节码输出到target\test-classes,同时把src\test\resources下的配置文件拷贝到target\test-classes
-
package打包插件
maven-jar-plugin
把class文件、配置文件打成一个jar(war或其它格式)包 -
deploy发布插件
maven-install-plugin
把构建好的artifact部署到本地仓库,还有一个deploy插件是将构建好的artifact部署到远程仓库
2.1 Maven依赖范围
范围依赖compile、provide、runtime、test、system
- compile:依赖作用在编译,测试,运行,由于运行时需要,所以编译范围的依赖会被打包(会被打包)
- test:依赖范围只在测试编译和测试运行时需要。不会打包
- provide: 依赖在编译和测试时需要,在运行时不需要。不会打包
- runtime:依赖范围在运行和测试系统时需要,但在编译时不需要。例如:jdbc的驱动包。由于运行时需要,所以runtime范围的依赖会被打包(会打包)
- system:范围依赖与provide类似,但是必须显示的提供一个对于本地系统中jar文件的路径
2.2 Maven常用设置
变量设置
- 全局变量
在pom.xml文件中,properties用于定义全局变量
POM中通过${property_name}的形式引用变量的值,定义全局变量
<properties>
<spring.version>4.3.10.RELEASE</spring.version></properties>
- 引用局部变量
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
指定资源位置
src/main/java和src/test/java这两个目录中的所有*.java文件会分别在comile和test-comiple阶段被编译,编译结果分别放到了target/classes和targe/test-classes目录中,但这两个目录中的其他文件都会被忽略掉,如果需要把src目录下的文件包放到target/classes目录,作为输出的jar一部分。要指定资源文件位置。
<build>
<resources>
<resource>
<!--所在的目录-->
<directory>src/main/java</directory>
<includes>
<!--包括目录下的.properties,.xml 文件都会扫描到-->
<include>**/*.properties</include>
<include>**/*.xml</include>
<include>**/*.txt</include>
</includes>
<!--filtering 选项 false 不启用过滤器, *.property 已经起到过滤的作用了 -->
<filtering>false</filtering>
</resource>
</resources>
</build>
2.3 Maven项目依赖
多个依赖之间,导致出现相同依赖并出现依赖的版本不一致。
依赖冲突解决
-
依赖调节原则:
第一申明者优先原则
,在pom文件中定义依赖,优先使用先申明的依赖为准(依赖的顺序,靠前的优先考虑) -
根据路径近者优先原则
-
如果一个pom引入两个相同jar包,以最后一个为准
可选依赖optional
加入optional,控制当前依赖能否被传递,true不能传递,false默认,能传递
<dependency>
<groupId>com.xiaozhi</groupId>
<artifactId>A</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- optional=true,依赖不会传递,该项目依赖A
之后依赖该项目的项目如果想要使用A,需要重新引入 -->
<optional>true</optional>
</dependency>
排除依赖
使用exclusions标签将传递过来的依赖排除出去
<dependency>
<groupId>g</groupId>
<artifactId>a</artifactId>
<version>c</version>
<exclusions>
<exclusion>
<groupId>排除的g</groupId>
<artifactId>排除的a</artifactId>
</exclusion>
</exclusions>
</dependency>
版本锁定
采用直接锁定版本的方法确定依赖jar包的版本,版本锁定后则不考虑依赖的声明顺序或依赖的路径,以锁定的版本为准添加到工程中
dependencyManagement标签中锁定依赖的版本
<dependencyManagement>
<dependencies>
</dependencies>
</dependencyManagement>
2.4 分模块构建maven工程
分模块构建maven工程
按业务模块进行拆分,每个模块拆分成一个maven工程
maven工程的继承
maven工程之间,子工程继承父工程后,就可以使用父工程中引入的依赖
父工程的打包方式必须是pom
继承其他maven父工程的项目在pom文件中通过parent标签
进行父工程的继承
父工程
<groupId>com.project</groupId>
<artifactId>parent</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
子工程
<parent>
<groupId>com.project</groupId>
<artifactId>parent</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
maven工程聚合
pom.xml中使用<modules>
标签将其他maven工程聚合到一起,聚合的目的进行统一操作
<groupId>org.example</groupId>
<artifactId>Thread</artifactId>
<version>1.0-SNAPSHOT</version>
<modules>
<module>maven_dao</module>
<module>maven_service</module>
<module>maven_web</module>
<module>maven_pojo</module>
</modules>