微服务轮子项目(54) - 项目根节点

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
云数据库 Tair(兼容Redis),内存型 2GB
简介: 微服务轮子项目(54) - 项目根节点

1. 引言

备注:本文的代码都提交到了码云,有兴趣的童鞋可以clone参阅,地址:https://gitee.com/19931024/microservice-framework

《轮子项目》前面前53篇文章都是描写理论的,本文回归本质,从代码开始讲起。

基本所有Java后台的项目都是使用Maven来构建的,本文主要讲解《轮子项目》的根节点管理。

2. 项目根节点

先贴上项目根节点的pom内容:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.ylw</groupId>
    <artifactId>central-parent</artifactId>
    <version>1.0.0</version>
    <packaging>pom</packaging>
    <properties>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <java.version>8</java.version>
        <spring-cloud-alibaba-dependencies.version>2.2.5.RELEASE</spring-cloud-alibaba-dependencies.version>
        <spring-boot-dependencies.version>2.3.8.RELEASE</spring-boot-dependencies.version>
        <spring-cloud-dependencies.version>Hoxton.SR9</spring-cloud-dependencies.version>
        <commons-collections4.version>4.4</commons-collections4.version>
        <swagger.version>2.9.2</swagger.version>
        <swagger.ui.version>1.8.7</swagger.ui.version>
        <swagger.mg.ui.version>1.0.6</swagger.mg.ui.version>
        <swagger.butler.version>2.0.1</swagger.butler.version>
        <jjwt.version>0.9.1</jjwt.version>
        <druid-starter>1.1.22</druid-starter>
        <jasypt.version>1.14</jasypt.version>
        <sharding-sphere.version>3.1.0</sharding-sphere.version>
        <security-oauth2.version>2.3.8.RELEASE</security-oauth2.version>
        <security-jwt.version>1.1.0.RELEASE</security-jwt.version>
        <redisson-starter.version>3.14.1</redisson-starter.version>
        <easyCaptcha.version>1.6.2</easyCaptcha.version>
        <hutool.version>5.1.4</hutool.version>
        <mybatis-plus-boot-starter.version>3.4.0</mybatis-plus-boot-starter.version>
        <aliyun-sdk-oss>3.8.1</aliyun-sdk-oss>
        <qiniu-java-sdk>7.2.28</qiniu-java-sdk>
        <easypoi.version>4.1.3</easypoi.version>
        <poi.version>4.1.1</poi.version>
        <spring-boot-admin.version>2.3.1</spring-boot-admin.version>
        <velocity.version>1.7</velocity.version>
        <commons-configuration2.version>2.7</commons-configuration2.version>
        <txlcn.version>5.0.2.RELEASE</txlcn.version>
        <fastdfs-client.version>1.27.2</fastdfs-client.version>
        <userAgent.version>1.21</userAgent.version>
        <transmittable.version>2.12.0</transmittable.version>
        <banner.version>1.0.2</banner.version>
        <commons-beanutils.version>1.9.4</commons-beanutils.version>
        <spring-social-security.version>1.1.6.RELEASE</spring-social-security.version>
        <commons-io.version>2.6</commons-io.version>
        <servlet-api.version>4.0.1</servlet-api.version>
        <spring-data-elasticsearch.version>4.1.3</spring-data-elasticsearch.version>
        <elasticsearch.version>7.10.2</elasticsearch.version>
        <knife4j.version>2.0.5</knife4j.version>
        <hibernate-validator.version>6.2.0.Final</hibernate-validator.version>
        <dubbo.version>2.7.8</dubbo.version>
        <docker-maven-plugin.version>1.2.2</docker-maven-plugin.version>
        <sonar.exclusions>ylw-job/**/*, ylw-register/**/*, ylw-web/**/*</sonar.exclusions>
        <docker.baseImage>openjdk:8-jre-alpine</docker.baseImage>
        <docker.volumes>/tmp</docker.volumes>
        <docker.image.prefix>hub.ylw.com:8080/microservices-platform</docker.image.prefix>
        <docker.java.security.egd>-Djava.security.egd=file:/dev/./urandom</docker.java.security.egd>
        <docker.java.opts>-Xms128m -Xmx128m</docker.java.opts>
    </properties>
    <dependencyManagement>
        <dependencies>
            <!-- druid 官方 starter -->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid-spring-boot-starter</artifactId>
                <version>${druid-starter}</version>
            </dependency>
            <!-- mybatis-plus start -->
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-boot-starter</artifactId>
                <version>${mybatis-plus-boot-starter.version}</version>
            </dependency>
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-extension</artifactId>
                <version>${mybatis-plus-boot-starter.version}</version>
            </dependency>
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus</artifactId>
                <version>${mybatis-plus-boot-starter.version}</version>
            </dependency>
            <!-- 加入spring security spring security oauth2的处理 -->
            <dependency>
                <groupId>org.springframework.security.oauth</groupId>
                <artifactId>spring-security-oauth2</artifactId>
                <version>${security-oauth2.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.security</groupId>
                <artifactId>spring-security-jwt</artifactId>
                <version>${security-jwt.version}</version>
            </dependency>
            <!-- 在Redis基础上的一个Java实用工具包 -->
            <dependency>
                <groupId>org.redisson</groupId>
                <artifactId>redisson-spring-boot-starter</artifactId>
                <version>${redisson-starter.version}</version>
            </dependency>
            <!-- swagger -->
            <dependency>
                <groupId>com.github.zlt2000</groupId>
                <artifactId>swagger-butler-core</artifactId>
                <version>${swagger.butler.version}</version>
            </dependency>
            <!-- 验证码生成工具 -->
            <dependency>
                <groupId>com.github.whvcse</groupId>
                <artifactId>easy-captcha</artifactId>
                <version>${easyCaptcha.version}</version>
            </dependency>
            <!-- hutool java工具类库  -->
            <dependency>
                <groupId>cn.hutool</groupId>
                <artifactId>hutool-all</artifactId>
                <version>${hutool.version}</version>
            </dependency>
            <dependency>
                <groupId>com.aliyun.oss</groupId>
                <artifactId>aliyun-sdk-oss</artifactId>
                <version>${aliyun-sdk-oss}</version>
            </dependency>
            <!-- 七牛依赖 -->
            <dependency>
                <groupId>com.qiniu</groupId>
                <artifactId>qiniu-java-sdk</artifactId>
                <version>${qiniu-java-sdk}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi</artifactId>
                <version>${poi.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi-ooxml</artifactId>
                <version>${poi.version}</version>
            </dependency>
            <!--   easypoi   -->
            <dependency>
                <groupId>cn.afterturn</groupId>
                <artifactId>easypoi-base</artifactId>
                <version>${easypoi.version}</version>
            </dependency>
            <dependency>
                <groupId>de.codecentric</groupId>
                <artifactId>spring-boot-admin-starter-server</artifactId>
                <version>${spring-boot-admin.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.velocity</groupId>
                <artifactId>velocity</artifactId>
                <version>${velocity.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-configuration2</artifactId>
                <version>${commons-configuration2.version}</version>
            </dependency>
            <dependency>
                <groupId>com.codingapi.txlcn</groupId>
                <artifactId>txlcn-tm</artifactId>
                <version>${txlcn.version}</version>
            </dependency>
            <dependency>
                <groupId>com.codingapi.txlcn</groupId>
                <artifactId>txlcn-tc</artifactId>
                <version>${txlcn.version}</version>
            </dependency>
            <dependency>
                <groupId>com.codingapi.txlcn</groupId>
                <artifactId>txlcn-txmsg-netty</artifactId>
                <version>${txlcn.version}</version>
            </dependency>
            <dependency>
                <groupId>io.shardingsphere</groupId>
                <artifactId>sharding-jdbc-spring-boot-starter</artifactId>
                <version>${sharding-sphere.version}</version>
            </dependency>
            <dependency>
                <groupId>com.github.tobato</groupId>
                <artifactId>fastdfs-client</artifactId>
                <version>${fastdfs-client.version}</version>
            </dependency>
            <dependency>
                <groupId>eu.bitwalker</groupId>
                <artifactId>UserAgentUtils</artifactId>
                <version>${userAgent.version}</version>
            </dependency>
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>transmittable-thread-local</artifactId>
                <version>${transmittable.version}</version>
            </dependency>
            <dependency>
                <groupId>com.nepxion</groupId>
                <artifactId>banner</artifactId>
                <version>${banner.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.social</groupId>
                <artifactId>spring-social-security</artifactId>
                <version>${spring-social-security.version}</version>
            </dependency>
            <dependency>
                <groupId>commons-io</groupId>
                <artifactId>commons-io</artifactId>
                <version>${commons-io.version}</version>
            </dependency>
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>javax.servlet-api</artifactId>
                <version>${servlet-api.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.data</groupId>
                <artifactId>spring-data-elasticsearch</artifactId>
                <version>${spring-data-elasticsearch.version}</version>
            </dependency>
            <dependency>
                <groupId>org.elasticsearch.client</groupId>
                <artifactId>elasticsearch-rest-high-level-client</artifactId>
                <version>${elasticsearch.version}</version>
            </dependency>
            <dependency>
                <groupId>org.elasticsearch.client</groupId>
                <artifactId>elasticsearch-rest-client</artifactId>
                <version>${elasticsearch.version}</version>
            </dependency>
            <dependency>
                <groupId>org.elasticsearch</groupId>
                <artifactId>elasticsearch</artifactId>
                <version>${elasticsearch.version}</version>
            </dependency>
            <dependency>
                <groupId>com.github.xiaoymin</groupId>
                <artifactId>knife4j-spring-boot-starter</artifactId>
                <version>${knife4j.version}</version>
            </dependency>
            <dependency>
                <groupId>com.github.xiaoymin</groupId>
                <artifactId>knife4j-micro-spring-boot-starter</artifactId>
                <version>${knife4j.version}</version>
            </dependency>
            <dependency>
                <groupId>org.hibernate</groupId>
                <artifactId>hibernate-validator</artifactId>
                <version>${hibernate-validator.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.dubbo</groupId>
                <artifactId>dubbo</artifactId>
                <version>${dubbo.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot-dependencies.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud-dependencies.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${spring-cloud-alibaba-dependencies.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-collections4</artifactId>
            <version>${commons-collections4.version}</version>
        </dependency>
        <dependency>
            <groupId>commons-beanutils</groupId>
            <artifactId>commons-beanutils</artifactId>
            <version>${commons-beanutils.version}</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <version>${spring-boot-dependencies.version}</version>
                </plugin>
                <plugin>
                    <groupId>com.spotify</groupId>
                    <artifactId>docker-maven-plugin</artifactId>
                    <version>${docker-maven-plugin.version}</version>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>
    <repositories>
        <repository>
            <id>aliyun-repos</id>
            <url>https://maven.aliyun.com/repository/public</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>
    <distributionManagement>
        <repository>
            <id>releases</id>
            <name>releases Repository</name>
            <url>http://192.168.28.138:8081/repository/maven-releases/</url>
        </repository>
        <snapshotRepository>
            <id>snapshots</id>
            <url>http://192.168.28.138:8081/repository/maven-snapshots/</url>
            <uniqueVersion>true</uniqueVersion>
        </snapshotRepository>
    </distributionManagement>
    <developers>
        <developer>
            <name>LinWei YangLinwei</name>
            <organizationUrl>https://gitee.com/19931024/microservice-framework</organizationUrl>
            <url>https://yanglinwei.blog.csdn.net/</url>
        </developer>
    </developers>
</project>

很多内容对吧!我上面的一串可以不看,我把代码折叠后,如下图:

主要分为如下几块:

  • 根节点的版本、描述、id、组织id定义
  • properties版本号统一管理
  • dependencyManagement依赖管理
  • dependencies 公用依赖管理
  • build
  • repositories
  • distributionManagement
  • developers

下面来详解。

2.1 基础配置

解析:

  • modelVersion:指定了当前POM模型的版本,对于Maven2Maven 3来说,它只能是4.0.0
  • groupId:项目组织唯一的标识符,实际对应JAVA的包的结构,是main目录里java的目录结构;
  • artifactId:就是项目的唯一的标识符,实际对应项目的名称,就是项目根目录的名称;
  • description:描述
  • version:版本号
  • packaging:分为pomjarwar下面继续讲解
2.1.1 packaging方式

packaging默认是jar类型,有几种打包方式:

  • pom:父类型都为pom类型
  • jar:内部调用或者是作服务使用
  • war:需要部署的项目

2.2 properties配置

通过properties元素用户可以自定义一个或多个Maven属性,然后在POM的其它地方使用**${属性名}**的方式引用该属性。

这种做法的最大意义在于消除重复和统一管理。

2.3 dependency配置

dependencyManagement dependencies

描述:

  • dependencyManagementdependencyManagement里只是声明依赖,并不实现引入,因此子项目需要显示的声明需要用的依赖。如果不在子项目中声明依赖,是不会从父项目中继承下来的;只有在子项目中写了该依赖项,并且没有指定具体版本,才会从父项目中继承该项,并且versionscope都读取自父pom;另外如果子项目中指定了版本号,那么会使用子项目中指定的jar版本。
  • dependencies:即使在子项目中不写该依赖项,那么子项目仍然会从父项目中继承该依赖项(全部继承)

2.4 build配置

和前面说的dependenciesdependencyManagement 的区别是非常类似的

描述:

  • pluginsplugins 下的 plugin 是真实使用的
  • pluginManagementpluginManagement 下的 plugins 下的plugin则仅仅是一种声明,子项目中可以对pluginManagement 下的 plugin 进行信息的选择、继承、覆盖等。

2.5 repositories配置

描述:

  • repositories标签的作用是用来配置maven项目的远程仓库;
  • 可以在repositories下面添加多个repository
  • 每个repository都有它唯一的ID,一个描述性的name,以及最重要的,远程仓库的url
  • <releases><enabled>true</enabled></releases>告诉Maven可以从这个仓库下载releases版本的构件,而<snapshots><enabled>false</enabled></snapshots>告诉Maven不要从这个仓库下载snapshot版本的构件(禁止从公共仓库下载snapshot构件是推荐的做法,因为这些构件不稳定,且不受你控制,你应该避免使用。当然,如果你想使用局域网内组织内部的仓库,你可以激活snapshot的支持)。

2.6 distributionManagement配置

描述:

  • mvn install 会将项目生成的构件安装到本地Maven仓库;
  • mvn deploy 用来将项目生成的构件分发到远程Maven仓库;
  • distributionManagement的作用是来指定Maven分发构件的位置。
  • snapshot为开发过程中的版本,实时,但不稳定,release版本则比较稳定
  • Maven会根据你项目的版本来判断将构件分发到哪个仓库

2.7 developers配置

描述:用来声明一些开发者的信息


相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
目录
相关文章
|
7月前
|
Dubbo Java 应用服务中间件
微服务框架(十)Maven Archetype制作Dubbo项目原型
  此系列文章将会描述Java框架Spring Boot、服务治理框架Dubbo、应用容器引擎Docker,及使用Spring Boot集成Dubbo、Mybatis等开源框架,其中穿插着Spring Boot中日志切面等技术的实现,然后通过gitlab-CI以持续集成为Docker镜像。   本文为Maven Archetype的制作及使用,使用archetype插件制作Dubbo项目原型
|
3月前
|
消息中间件 监控 开发工具
微服务(三)-实现自动刷新配置(不重启项目情况下)
微服务(三)-实现自动刷新配置(不重启项目情况下)
|
1月前
|
网络安全 Nacos 开发者
Nacos作为流行的微服务注册与配置中心,“节点提示暂时不可用”是常见的问题之一
Nacos作为流行的微服务注册与配置中心,其稳定性和易用性备受青睐。然而,“节点提示暂时不可用”是常见的问题之一。本文将探讨该问题的原因及解决方案,帮助开发者快速定位并解决问题,确保服务的正常运行。通过检查服务实例状态、网络连接、Nacos配置、调整健康检查策略等步骤,可以有效解决这一问题。
37 4
|
7月前
|
微服务
jeecg微服务项目调用接口报错Token验证失效的解决方法
jeecg微服务项目调用接口报错Token验证失效的解决方法
|
4月前
|
Linux 微服务
【Azure微服务 Service Fabric 】如何转移Service Fabric集群中的种子节点(Seed Node)
【Azure微服务 Service Fabric 】如何转移Service Fabric集群中的种子节点(Seed Node)
|
4月前
|
安全 微服务
【Azure微服务 Service Fabric 】因证书过期导致Service Fabric集群挂掉(升级无法完成,节点不可用)
【Azure微服务 Service Fabric 】因证书过期导致Service Fabric集群挂掉(升级无法完成,节点不可用)
|
7月前
|
SpringCloudAlibaba Java 持续交付
【构建一套Spring Cloud项目的大概步骤】&【Springcloud Alibaba微服务分布式架构学习资料】
【构建一套Spring Cloud项目的大概步骤】&【Springcloud Alibaba微服务分布式架构学习资料】
419 0
|
4月前
|
API 微服务
【Azure 微服务】面对Service Fabric中节点状态不正常(Disabling/Warning/RemoveNode)的几种尝试解决方案
【Azure 微服务】面对Service Fabric中节点状态不正常(Disabling/Warning/RemoveNode)的几种尝试解决方案
|
4月前
|
网络协议 微服务
【Azure 微服务】基于已经存在的虚拟网络(VNET)及子网创建新的Service Fabric并且为所有节点配置自定义DNS服务
【Azure 微服务】基于已经存在的虚拟网络(VNET)及子网创建新的Service Fabric并且为所有节点配置自定义DNS服务
|
4月前
|
微服务 Windows
【Azure微服务 Service Fabric 】在SF节点中开启Performance Monitor及设置抓取进程的方式
【Azure微服务 Service Fabric 】在SF节点中开启Performance Monitor及设置抓取进程的方式