小帽教育使用 Maven 来进行项目的管理和构建。整个项目分为三大类工程:父工程、基础工程 和微服务工程。
每一种类的工程都有不同的作用,下面是对其功能进行说明:
父工程
基础工程
继承父类工程
提供基础类库
提供工具类库
微服务工程
父程的职责是对依赖包的版本进行管理,本小节创建父工程分两步,第一创建父工程,第二在pom.xml编辑依赖管理。
1、首先创建父工程
为了对代码更好的进行权限管理,这里我们单独创建父工程。
使用idea打开工程目录,进入工程结构界面。
点击File–>Project Structure:
进入Project Structure,首先检查jdk是否配置正确,并进行配置。
进入Modules界面,新建模块
进入新建模块界面,选择Spring Initializr,填写模块的信息。
注意:这里Server URL默认是start.spring.io,如果连接不上可换为start.aliyun.com。
填写模块信息注意坐标信息填写正确,填写完毕,点击Next
进入下一步不用选择任何依赖,点击“Create”。
模块创建成功,
发现通过idea创建的工程有很多多余文件,这时需要把里边多余的文件和目录删除。
点击“Delete” 删除成功,如下图:
到此父工程创建完成。
2、依赖管理定义
下边开始编辑xuecheng-plus-parent父工程的依赖管理 。
父工程中没有代码,不用去依赖其它的包,它的作用是限定其它子工程依赖包的版本号,即在dependencyManagement 中去编辑即可。
1)确定父工程为一个pom工程,在pom.xml中添加如下内容:
pom
2)确定项目所以依赖的包及其版本号。
1.8
UTF-8
UTF-8
2.3.7.RELEASE
Hoxton.SR9
1.3.1.Final
2.2.6.RELEASE
1.18.8
4.0.1
1.2.83
1.2.8
8.0.30
3.4.1
2.6
8.4.3
2.3.1
1.5.20
3.10
4.8.1
1.9.0.RELEASE
7.12.1
编写dependencyManagement l来限定所依赖包的版本。
org.springframework.cloud
spring-cloud-dependencies
${spring-cloud.version}
pom
import
org.springframework.boot
spring-boot-dependencies
${spring-boot.version}
pom
import
com.alibaba.cloud
spring-cloud-alibaba-dependencies
${spring-cloud-alibaba.version}
pom
import
org.projectlombok
lombok
${org.projectlombok.version}
org.mapstruct
mapstruct-jdk8
${org.mapstruct.version}
org.mapstruct
mapstruct-processor
${org.mapstruct.version}
io.swagger
swagger-annotations
${swagger-annotations.version}
javax.servlet
javax.servlet-api
${javax.servlet-api.version}
provided
com.alibaba
fastjson
${fastjson.version}
com.alibaba
druid-spring-boot-starter
${druid-spring-boot-starter.version}
mysql
mysql-connector-java
${mysql-connector-java.version}
com.baomidou
mybatis-plus-boot-starter
${mybatis-plus-boot-starter.version}
com.baomidou
mybatis-plus-generator
${mybatis-plus-boot-starter.version}
commons-lang
commons-lang
${commons-lang.version}
io.minio
minio
${minio.version}
com.google.guava
guava
25.0-jre
com.xuxueli
xxl-job-core
${xxl-job-core.version}
org.springframework.boot
spring-boot-starter-test
${spring-boot.version}
test
org.junit.vintage
junit-vintage-engine
com.squareup.okhttp3
okhttp
${okhttp.version}
org.apache.commons
commons-lang3
${commons-lang3.version}
com.spring4all
swagger-spring-boot-starter
${swagger-spring-boot-starter.version}
org.elasticsearch.client
elasticsearch-rest-high-level-client
${elasticsearch.version}
org.elasticsearch
elasticsearch
${elasticsearch.version}
编辑打包插件:
${project.name}
src/main/resources
true
**/*
src/main/java
**/*.xml
org.springframework.boot
spring-boot-maven-plugin
${spring-boot.version}
org.apache.maven.plugins
maven-compiler-plugin
3.8.1
1.8
org.projectlombok
lombok
${org.projectlombok.version}
org.apache.maven.plugins
maven-resources-plugin
3.3.0
utf-8
true
工程创建完成提交至git。
基础工程的职责是提供一些系统架构所需要的基础类库以及一此工具类库。
1、首先创建基础工程xuecheng-plus-base。
创建的过程同父工程的创建过程,如下图:
创建完成,删除多余文件,如下图:
这里需要注意的是xuecheng-plus-base的父工程为xuecheng-plus-parent,xuecheng-plus-base的pom.xml的如下:
4.0.0
xuecheng-plus-parent
com.xucheng
0.0.1-SNAPSHOT
../xuecheng-plus-parent
xuecheng-plus-base
xuecheng-plus-base
xuecheng-plus-base
org.projectlombok
lombok
org.apache.commons
commons-lang3
com.alibaba
fastjson
javax.servlet
javax.servlet-api
provided
commons-lang
commons-lang
commons-codec
commons-codec
1.11
io.swagger
swagger-annotations
org.springframework
spring-web
org.springframework.boot
spring-boot-starter-validation
org.springframework.boot
spring-boot-starter-log4j2
com.j256.simplemagic
simplemagic
1.17
org.apache.commons
commons-lang3
com.google.zxing
core
3.3.3
com.google.zxing
javase
3.3.3
com.fasterxml.jackson.module
jackson-module-parameter-names
com.fasterxml.jackson.datatype
jackson-datatype-jdk8
com.fasterxml.jackson.datatype
jackson-datatype-jsr310
基础工程中的内容待需要时再行开发。
至此父工程和基础工程创建完成,最后提交至git。
在项目工程的根目录添加.gitignore文件,编辑内容如下:
HELP.md
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**
!**/src/test/**
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
logs/
### VS Code ###
.vscode/
将基础工程代码提交到git
初次提交git要求输入gogs的账号和密码
使用自己在gogs上开通的账号和密码提交代码。
我们在使用Git时难免会出现代码冲突的问题,出现冲突的原因是因为当本地文件的版本与目标分支中文件的版本不一致时当存在同一行的内容不同时在进行合并时会出现冲突。
代码冲突一般发生在以下情况:
发生了冲突需要手动合并代码,选择最终的版本,可以通过图形界面,如下:
点击Merge
选择版本后,点击Apply,提交代码并push到远程仓库。
不通过图形化界面处理冲突,当出现冲突后在代码中自动添加了版本标识,如下:
手动修改代码如下:
将文件添加到暂存区,提交文件,push到远程仓库即可。
我们不是直接在主分支开发,由技术经理创建独立的开发分支,我们是在独立的开发分支中进行开发,最后由技术经理将开发分支合并到主分支。
mvn clean // 清除target目录中的生成结果
mvn compile // 编译源代码
mvn test // 执行单元测试
mvn package // 打包
mvn install // 打包并把打好的包上传到本地仓库
mvn deploy // 打包并把打好的包上传到远程仓库
maven依赖版本冲突一般是由于间接依赖导致一个jar包即有多个不同的版本,比如:A依赖了B的1.0版本,C依赖了B的2.0版本,项目依赖A和C从而间接依赖了B的1.0和2.0版本,此时B有两个版本引入到了项目中,当存在版本冲突时可能会出现ClassNotFoundException、NoSuchMethodError等错误。
处理版本冲突可以使用以下方法: