备注:本文的代码都提交到了码云,有兴趣的童鞋可以clone参阅,地址:https://gitee.com/19931024/microservice-framework
本文目录结构:
|_ _ 1.引言 |_ _ _ _ _ 2.项目根节点 |_ _ _ _ _ _ _ 2.1 基础配置 |_ _ _ _ _ _ _ _ _ 2.1.1 packaging方式 |_ _ _ _ _ _ _ 2.2 properties配置 |_ _ _ _ _ _ _ 2.3 dependency配置 |_ _ _ _ _ _ _ 2.4 build配置 |_ _ _ _ _ _ _ 2.5 repositories配置 |_ _ _ _ _ _ _ 2.6 distributionManagement配置 |_ _ _ _ _ _ _ 2.7 developers配置
《轮子项目》前面前53
篇文章都是描写理论的,本文回归本质,从代码开始讲起。
基本所有Java
后台的项目都是使用Maven
来构建的,本文主要讲解《轮子项目》的根节点管理。
先贴上项目根节点的pom
内容:
4.0.0
com.ylw
central-parent
1.0.0
pom
1.8
1.8
UTF-8
8
2.2.5.RELEASE
2.3.8.RELEASE
Hoxton.SR9
4.4
2.9.2
1.8.7
1.0.6
2.0.1
0.9.1
1.1.22
1.14
3.1.0
2.3.8.RELEASE
1.1.0.RELEASE
3.14.1
1.6.2
5.1.4
3.4.0
3.8.1
7.2.28
4.1.3
4.1.1
2.3.1
1.7
2.7
5.0.2.RELEASE
1.27.2
1.21
2.12.0
1.0.2
1.9.4
1.1.6.RELEASE
2.6
4.0.1
4.1.3
7.10.2
2.0.5
6.2.0.Final
2.7.8
1.2.2
ylw-job/**/*, ylw-register/**/*, ylw-web/**/*
openjdk:8-jre-alpine
/tmp
hub.ylw.com:8080/microservices-platform
-Djava.security.egd=file:/dev/./urandom
-Xms128m -Xmx128m
com.alibaba
druid-spring-boot-starter
${druid-starter}
com.baomidou
mybatis-plus-boot-starter
${mybatis-plus-boot-starter.version}
com.baomidou
mybatis-plus-extension
${mybatis-plus-boot-starter.version}
com.baomidou
mybatis-plus
${mybatis-plus-boot-starter.version}
org.springframework.security.oauth
spring-security-oauth2
${security-oauth2.version}
org.springframework.security
spring-security-jwt
${security-jwt.version}
org.redisson
redisson-spring-boot-starter
${redisson-starter.version}
com.github.zlt2000
swagger-butler-core
${swagger.butler.version}
com.github.whvcse
easy-captcha
${easyCaptcha.version}
cn.hutool
hutool-all
${hutool.version}
com.aliyun.oss
aliyun-sdk-oss
${aliyun-sdk-oss}
com.qiniu
qiniu-java-sdk
${qiniu-java-sdk}
org.apache.poi
poi
${poi.version}
org.apache.poi
poi-ooxml
${poi.version}
cn.afterturn
easypoi-base
${easypoi.version}
de.codecentric
spring-boot-admin-starter-server
${spring-boot-admin.version}
org.apache.velocity
velocity
${velocity.version}
org.apache.commons
commons-configuration2
${commons-configuration2.version}
com.codingapi.txlcn
txlcn-tm
${txlcn.version}
com.codingapi.txlcn
txlcn-tc
${txlcn.version}
com.codingapi.txlcn
txlcn-txmsg-netty
${txlcn.version}
io.shardingsphere
sharding-jdbc-spring-boot-starter
${sharding-sphere.version}
com.github.tobato
fastdfs-client
${fastdfs-client.version}
eu.bitwalker
UserAgentUtils
${userAgent.version}
com.alibaba
transmittable-thread-local
${transmittable.version}
com.nepxion
banner
${banner.version}
org.springframework.social
spring-social-security
${spring-social-security.version}
commons-io
commons-io
${commons-io.version}
javax.servlet
javax.servlet-api
${servlet-api.version}
org.springframework.data
spring-data-elasticsearch
${spring-data-elasticsearch.version}
org.elasticsearch.client
elasticsearch-rest-high-level-client
${elasticsearch.version}
org.elasticsearch.client
elasticsearch-rest-client
${elasticsearch.version}
org.elasticsearch
elasticsearch
${elasticsearch.version}
com.github.xiaoymin
knife4j-spring-boot-starter
${knife4j.version}
com.github.xiaoymin
knife4j-micro-spring-boot-starter
${knife4j.version}
org.hibernate
hibernate-validator
${hibernate-validator.version}
org.apache.dubbo
dubbo
${dubbo.version}
org.springframework.boot
spring-boot-dependencies
${spring-boot-dependencies.version}
pom
import
org.springframework.cloud
spring-cloud-dependencies
${spring-cloud-dependencies.version}
pom
import
com.alibaba.cloud
spring-cloud-alibaba-dependencies
${spring-cloud-alibaba-dependencies.version}
pom
import
org.apache.commons
commons-lang3
org.apache.commons
commons-collections4
${commons-collections4.version}
commons-beanutils
commons-beanutils
${commons-beanutils.version}
org.projectlombok
lombok
org.springframework.boot
spring-boot-starter-test
test
org.springframework.boot
spring-boot-maven-plugin
${spring-boot-dependencies.version}
com.spotify
docker-maven-plugin
${docker-maven-plugin.version}
aliyun-repos
https://maven.aliyun.com/repository/public
false
releases
releases Repository
http://192.168.28.138:8081/repository/maven-releases/
snapshots
http://192.168.28.138:8081/repository/maven-snapshots/
true
LinWei YangLinwei
https://gitee.com/19931024/microservice-framework
https://yanglinwei.blog.csdn.net/
很多内容对吧!我上面的一串可以不看,我把代码折叠后,如下图:
主要分为如下几块:
- 根节点的版本、描述、id、组织id定义
- properties版本号统一管理
- dependencyManagement依赖管理
- dependencies 公用依赖管理
- build
- repositories
- distributionManagement
- developers
下面来详解。
2.1 基础配置解析:
- modelVersion:指定了当前
POM
模型的版本,对于Maven2
及Maven 3
来说,它只能是4.0.0
; - groupId:项目组织唯一的标识符,实际对应
JAVA
的包的结构,是main
目录里java
的目录结构; - artifactId:就是项目的唯一的标识符,实际对应项目的名称,就是项目根目录的名称;
- description:描述
- version:版本号
- packaging:分为
pom
、jar
、war
下面继续讲解
packaging
默认是jar
类型,有几种打包方式:
- pom:父类型都为
pom
类型 - jar:内部调用或者是作服务使用
- war:需要部署的项目
通过properties
元素用户可以自定义一个或多个Maven
属性,然后在POM
的其它地方使用**${属性名}**
的方式引用该属性。
这种做法的最大意义在于消除重复和统一管理。
2.3 dependency配置 dependencyManagementdependencies

描述:
- dependencyManagement:
dependencyManagement
里只是声明依赖,并不实现引入,因此子项目需要显示的声明需要用的依赖。如果不在子项目中声明依赖,是不会从父项目中继承下来的;只有在子项目中写了该依赖项,并且没有指定具体版本,才会从父项目中继承该项,并且version
和scope
都读取自父pom
;另外如果子项目中指定了版本号,那么会使用子项目中指定的jar版本。 - dependencies:即使在子项目中不写该依赖项,那么子项目仍然会从父项目中继承该依赖项(全部继承)
和前面说的
dependencies
和 dependencyManagement
的区别是非常类似的
描述:
- plugins:
plugins
下的plugin
是真实使用的 - pluginManagement :
pluginManagement
下的plugins
下的plugin
则仅仅是一种声明,子项目中可以对pluginManagement
下的plugin
进行信息的选择、继承、覆盖等。
描述:
repositories
标签的作用是用来配置maven
项目的远程仓库;- 可以在
repositories
下面添加多个repository
; - 每个
repository
都有它唯一的ID
,一个描述性的name
,以及最重要的,远程仓库的url
; true
告诉Maven
可以从这个仓库下载releases
版本的构件,而false
告诉Maven不要从这个仓库下载snapshot
版本的构件(禁止从公共仓库下载snapshot
构件是推荐的做法,因为这些构件不稳定,且不受你控制,你应该避免使用。当然,如果你想使用局域网内组织内部的仓库,你可以激活snapshot的支持)。
描述:
- mvn install 会将项目生成的构件安装到本地Maven仓库;
- mvn deploy 用来将项目生成的构件分发到远程Maven仓库;
- distributionManagement的作用是来指定Maven分发构件的位置。
- snapshot为开发过程中的版本,实时,但不稳定,release版本则比较稳定
- Maven会根据你项目的版本来判断将构件分发到哪个仓库
描述:用来声明一些开发者的信息