【项目】小帽教育(三)

小帽教育

第一章 项目开发环境搭建

四、项目开发环境搭建

2. 项目工程搭建

2.1 工程结构关系

小帽教育使用 Maven 来进行项目的管理和构建。整个项目分为三大类工程:父工程、基础工程 和微服务工程。
【项目】小帽教育(三)_第1张图片
​ 每一种类的工程都有不同的作用,下面是对其功能进行说明:

  • 父工程

    • 对依赖包的版本进行管理
    • 本身为Pom工程,对子工程进行聚合管理
  • 基础工程

    • 继承父类工程

    • 提供基础类库

    • 提供工具类库

  • 微服务工程

    • 分别从业务、技术方面划分模块,每个模块构建为一个微服务。
    • 每个微服务工程依赖基础工程,间接继承父工程。
    • 包括:内容管理服务、媒资管理服务、搜索服务、缓存服务、消息服务等。
2.2 构建父工程

父程的职责是对依赖包的版本进行管理,本小节创建父工程分两步,第一创建父工程,第二在pom.xml编辑依赖管理。
1、首先创建父工程

为了对代码更好的进行权限管理,这里我们单独创建父工程。

使用idea打开工程目录,进入工程结构界面。

点击File–>Project Structure:
【项目】小帽教育(三)_第2张图片
进入Project Structure,首先检查jdk是否配置正确,并进行配置。
【项目】小帽教育(三)_第3张图片
进入Modules界面,新建模块
【项目】小帽教育(三)_第4张图片
进入新建模块界面,选择Spring Initializr,填写模块的信息。

注意:这里Server URL默认是start.spring.io,如果连接不上可换为start.aliyun.com。
【项目】小帽教育(三)_第5张图片
填写模块信息注意坐标信息填写正确,填写完毕,点击Next

进入下一步不用选择任何依赖,点击“Create”。

模块创建成功,

【项目】小帽教育(三)_第6张图片
发现通过idea创建的工程有很多多余文件,这时需要把里边多余的文件和目录删除。
【项目】小帽教育(三)_第7张图片
点击“Delete” 删除成功,如下图:
【项目】小帽教育(三)_第8张图片
到此父工程创建完成。

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
                    
                    1.8
                    
                    

                        
                            org.projectlombok
                            lombok
                            ${org.projectlombok.version}
                        
                    
                
            

            
            
                org.apache.maven.plugins
                maven-resources-plugin
                3.3.0
                
                    utf-8
                    
                    true
                
            
        
    

工程创建完成提交至git。

2.3 构建基础工程

基础工程的职责是提供一些系统架构所需要的基础类库以及一此工具类库。
1、首先创建基础工程xuecheng-plus-base。

创建的过程同父工程的创建过程,如下图:
【项目】小帽教育(三)_第9张图片
创建完成,删除多余文件,如下图:
【项目】小帽教育(三)_第10张图片
这里需要注意的是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。

2.4 提交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的账号和密码
【项目】小帽教育(三)_第11张图片
使用自己在gogs上开通的账号和密码提交代码。

账号或密码错误时报如下错误
【项目】小帽教育(三)_第12张图片

3. 面试

3.1 Git代码冲突怎么处理?

我们在使用Git时难免会出现代码冲突的问题,出现冲突的原因是因为当本地文件的版本与目标分支中文件的版本不一致时当存在同一行的内容不同时在进行合并时会出现冲突。

代码冲突一般发生在以下情况:

  1. 多个分支向主分支合并时
  2. 同一个分支下pull或push操作时

发生了冲突需要手动合并代码,选择最终的版本,可以通过图形界面,如下:

【项目】小帽教育(三)_第13张图片
点击Merge
【项目】小帽教育(三)_第14张图片
选择版本后,点击Apply,提交代码并push到远程仓库。
不通过图形化界面处理冲突,当出现冲突后在代码中自动添加了版本标识,如下:
【项目】小帽教育(三)_第15张图片
手动修改代码如下:
【项目】小帽教育(三)_第16张图片
将文件添加到暂存区,提交文件,push到远程仓库即可。

3.2 你是在哪个分支开发?

我们不是直接在主分支开发,由技术经理创建独立的开发分支,我们是在独立的开发分支中进行开发,最后由技术经理将开发分支合并到主分支。

3.3 maven的常用命令

mvn clean // 清除target目录中的生成结果
mvn compile // 编译源代码
mvn test // 执行单元测试
mvn package // 打包
mvn install // 打包并把打好的包上传到本地仓库
mvn deploy // 打包并把打好的包上传到远程仓库

3.4 maven依赖版本冲突怎么处理?

maven依赖版本冲突一般是由于间接依赖导致一个jar包即有多个不同的版本,比如:A依赖了B的1.0版本,C依赖了B的2.0版本,项目依赖A和C从而间接依赖了B的1.0和2.0版本,此时B有两个版本引入到了项目中,当存在版本冲突时可能会出现ClassNotFoundException、NoSuchMethodError等错误。

处理版本冲突可以使用以下方法:

  1. 使用exclusions排除依赖
    比如:我们只依赖B的1.0版本,此时可以在依赖C时排除对B的依赖。
  2. 使用DependencyManagement锁定版本号
    通常在父工程对依赖的版本统一管理。
    比如:我们只依赖B的1.0版本,此时可以在父工程中限定B的版本为1.0。

你可能感兴趣的:(小帽教育,java,微服务,spring)