(一)Alian 的 Spring Cloud Bom(Bom即材料清单)

一、创建bom工程

1.1、第一步

在这里插入图片描述

1.2、第二步

在这里插入图片描述

1.3、第三步

在这里插入图片描述
  总体来说它就是一个maven工程。

二、pom文件配置

pom.xml

<?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>cn.alian.microservice</groupId>
    <artifactId>bom</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>pom</packaging>

    <!--属性配置-->
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <!--spring-cloud版本-->
        <spring-cloud.version>Hoxton.SR12</spring-cloud.version>
        <!--spring-boot版本-->
        <spring-boot.version>2.3.12.RELEASE</spring-boot.version>
        <!--Spring boot Redis版本-->
        <redis.version>2.3.3.RELEASE</redis.version>
        <!--swagger版本-->
        <swagger.version>2.9.2</swagger.version>
        <!--swagger parser版本-->
        <swagger.annotations.version>1.5.20</swagger.annotations.version>
        <!--swagger parser版本-->
        <swagger.parser.version>1.0.36</swagger.parser.version>
        <!--data Ebean版本-->
        <data.ebean.version>2.0.0.RELEASE</data.ebean.version>
        <!--Ebean版本(版本很难找啊:11.45.1)-->
        <io.ebean.version>12.2.6</io.ebean.version>
        <!--spring boot druid版本-->
        <druid.version>1.2.6</druid.version>
        <!--mysql版本-->
        <mysql.version>8.0.26</mysql.version>
        <!--shedlock版本-->
        <shedlock.version>4.32.0</shedlock.version>
        <!--dozermapper版本-->
        <dozermapper.version>6.5.0</dozermapper.version>
        <!--jsoup版本-->
        <jsoup.version>1.14.1</jsoup.version>
        <!--fastjson版本-->
        <fastjson.version>1.2.75</fastjson.version>
        <!--jackson版本-->
        <jackson.version>2.12.2</jackson.version>
        <!--lombok版本-->
        <lombok.version>1.18.20</lombok.version>
        <!--mockito版本-->
        <mockito.version>4.3.0</mockito.version>
        <!--私服地址-->
        <nexus.url>http://192.168.0.210:8081</nexus.url>
    </properties>

    <!--依赖管理,主要是管理依赖的版本-->
    <dependencyManagement>
        <dependencies>
            <!--springCloud版本依赖-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <!--springBoot版本依赖-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-parent</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <!-- 稳定版redis -->
            <dependency>
                <groupId>org.springframework.session</groupId>
                <artifactId>spring-session-data-redis</artifactId>
                <version>${redis.version}</version>
            </dependency>

            <!-- swagger2.0 -->
            <dependency>
                <groupId>io.springfox</groupId>
                <artifactId>springfox-swagger-ui</artifactId>
                <version>${swagger.version}</version>
            </dependency>

            <dependency>
                <groupId>io.springfox</groupId>
                <artifactId>springfox-swagger2</artifactId>
                <version>${swagger.version}</version>
            </dependency>

            <dependency>
                <groupId>io.swagger</groupId>
                <artifactId>swagger-annotations</artifactId>
                <version>${swagger.annotations.version}</version>
            </dependency>

            <dependency>
                <groupId>io.swagger</groupId>
                <artifactId>swagger-parser</artifactId>
                <version>${swagger.parser.version}</version>
            </dependency>

            <!-- Ebean support -->
            <dependency>
                <groupId>io.github.hexagonframework.boot</groupId>
                <artifactId>spring-boot-starter-data-ebean</artifactId>
                <version>${data.ebean.version}</version>
            </dependency>
            <!-- Ebean -->
            <dependency>
                <groupId>io.ebean</groupId>
                <artifactId>ebean</artifactId>
                <version>${io.ebean.version}</version>
            </dependency>
            <!-- Query bean -->
            <dependency>
                <groupId>io.ebean</groupId>
                <artifactId>ebean-querybean</artifactId>
                <version>${io.ebean.version}</version>
            </dependency>
            <!-- APT Query bean generation for Java -->
            <dependency>
                <groupId>io.ebean</groupId>
                <artifactId>querybean-generator</artifactId>
                <version>${io.ebean.version}</version>
                <scope>provided</scope>
            </dependency>

            <!-- eureka-client scope runtime -->
            <dependency>
                <groupId>com.sun.jersey.contribs</groupId>
                <artifactId>jersey-apache-client4</artifactId>
                <version>1.19.4</version>
            </dependency>

            <!--log4jdbc驱动打印sql-->
            <dependency>
                <groupId>com.googlecode.log4jdbc</groupId>
                <artifactId>log4jdbc</artifactId>
                <version>1.2</version>
            </dependency>

            <!--druid连接池-->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid-spring-boot-starter</artifactId>
                <version>${druid.version}</version>
            </dependency>

            <!--mysql连接-->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>${mysql.version}</version>
                <scope>runtime</scope>
            </dependency>

            <!--分布式锁-->
            <dependency>
                <groupId>cn.keking</groupId>
                <artifactId>spring-boot-klock-starter</artifactId>
                <version>1.4-RELEASE</version>
            </dependency>

            <!--分布式定时任务锁-->
            <dependency>
                <groupId>net.javacrumbs.shedlock</groupId>
                <artifactId>shedlock-spring</artifactId>
                <version>${shedlock.version}</version>
            </dependency>

            <dependency>
                <groupId>net.javacrumbs.shedlock</groupId>
                <artifactId>shedlock-provider-redis-spring</artifactId>
                <version>${shedlock.version}</version>
            </dependency>

            <!--dozer属性映射(超好用)-->
            <dependency>
                <groupId>com.github.dozermapper</groupId>
                <artifactId>dozer-spring-boot-starter</artifactId>
                <version>${dozermapper.version}</version>
            </dependency>

            <dependency>
                <groupId>com.github.dozermapper</groupId>
                <artifactId>dozer-core</artifactId>
                <version>${dozermapper.version}</version>
            </dependency>

            <!--common的公共包-->
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-lang3</artifactId>
                <version>3.12.0</version>
            </dependency>

            <dependency>
                <groupId>commons-beanutils</groupId>
                <artifactId>commons-beanutils</artifactId>
                <version>1.9.4</version>
            </dependency>

            <dependency>
                <groupId>commons-io</groupId>
                <artifactId>commons-io</artifactId>
                <version>2.10.0</version>
            </dependency>

            <dependency>
                <groupId>commons-httpclient</groupId>
                <artifactId>commons-httpclient</artifactId>
                <version>3.1</version>
            </dependency>

            <dependency>
                <groupId>net.lingala.zip4j</groupId>
                <artifactId>zip4j</artifactId>
                <version>1.3.2</version>
            </dependency>

            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-text</artifactId>
                <version>1.9</version>
            </dependency>

            <!--jsoup-->
            <dependency>
                <groupId>org.jsoup</groupId>
                <artifactId>jsoup</artifactId>
                <version>1.14.1</version>
            </dependency>

            <!--阿里巴巴的fastjson-->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
                <version>${fastjson.version}</version>
            </dependency>

            <!--jackson-->
            <dependency>
                <groupId>com.github.joschi.jackson</groupId>
                <artifactId>jackson-datatype-threetenbp</artifactId>
                <version>${jackson.version}</version>
            </dependency>

            <!--guava工具库-->
            <dependency>
                <groupId>com.google.guava</groupId>
                <artifactId>guava</artifactId>
                <version>20.0</version>
            </dependency>

            <dependency>
                <groupId>com.github.rholder</groupId>
                <artifactId>guava-retrying</artifactId>
                <version>2.0.0</version>
            </dependency>

            <!--类扫描工具-->
            <dependency>
                <groupId>io.github.classgraph</groupId>
                <artifactId>classgraph</artifactId>
                <version>4.8.140</version>
            </dependency>

            <!--日志-->
            <dependency>
                <groupId>org.zalando</groupId>
                <artifactId>logbook-spring-boot-starter</artifactId>
                <version>2.0.0</version>
            </dependency>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>${lombok.version}</version>
            </dependency>

            <!--mock单元测试-->
            <dependency>
                <groupId>org.mockito</groupId>
                <artifactId>mockito-junit-jupiter</artifactId>
                <version>${mockito.version}</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.mockito</groupId>
                <artifactId>mockito-inline</artifactId>
                <version>${mockito.version}</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.mockito</groupId>
                <artifactId>mockito-core</artifactId>
                <version>${mockito.version}</version>
                <scope>test</scope>
            </dependency>

        </dependencies>
    </dependencyManagement>

    <!--依赖的下载地址-->
    <repositories>
        <repository>
            <id>nexus-repos</id>
            <name>Team Nexus Repository</name>
            <url>${nexus.url}/nexus/content/groups/public</url>
        </repository>
        <repository>
            <id>nexus-repos-snapshots</id>
            <name>Team Nexus Repository Snapshots</name>
            <url>${nexus.url}/nexus/content/groups/public-snapshots</url>
        </repository>
    </repositories>

    <!--插件的下载地址-->
    <pluginRepositories>
        <pluginRepository>
            <id>nexus-repos</id>
            <name>Team Nexus Repository</name>
            <url>${nexus.url}/nexus/content/groups/public</url>
        </pluginRepository>
        <pluginRepository>
            <id>nexus-repos-snapshots</id>
            <name>Team Nexus Repository Snapshots</name>
            <url>${nexus.url}/nexus/content/groups/public-snapshots</url>
        </pluginRepository>
    </pluginRepositories>

    <!--打包成库文件的上传地址-->
    <distributionManagement>
        <repository>
            <id>releases</id>
            <name>Nexus Release Repository</name>
            <url>${nexus.url}/nexus/content/repositories/releases/</url>
        </repository>
        <snapshotRepository>
            <id>snapshots</id>
            <name>Nexus Snapshot Repository</name>
            <url>${nexus.url}/nexus/content/repositories/snapshots/</url>
        </snapshotRepository>
    </distributionManagement>

</project>

  我这里选择的依赖都是比较新且稳定的版本,你也可以根据自己的需要进行调整,主要有

  • Spring Boot
  • Spring Cloud
  • Eureka
  • Swagger
  • Redis分布式锁
  • 分布式定时任务锁
  • Ebean
  • DozerMapping
  • MySQL
  • mockito单元测试
  • 其他常用工具包

  这里对 dependencies dependencyManagement 做一个说明

类型作用
dependencies 项目具体使用的依赖
dependencyManagement 依赖管理,项目并不会引用依赖到项目,只有在子项目中直接应用 groupId artifactId ,而不用指定版本,才会从父项目中继承该项,如果子项目中指定了版本号,那么会使用子项目中指定的jar版本

  这里对 repositories pluginRepositories distributionManagement 做一个说明

类型作用
repositories 配置依赖的下载地址,可以是私服和其他镜像源结合(比如阿里云)
pluginRepositories 配置插件的下载地址(如很多打包的插件)
distributionManagement 打包成库文件的上传地址,一般是上传到私服

三、maven私服配置

3.1、镜像源配置

  在你maven安装路径下面的 conf/setting.xml 中的 mirrors标签 里添加成如下(私服 + 阿里云):

 <mirrors>
 	<mirror>
        <!-- 私服的地址-->
        <id>nexus-repos</id>
		<name>Team Nexus Repository</name>
		<url>http://192.168.0.210:8080/nexus/content/groups/public</url> 
		<mirrorOf>central</mirrorOf>  
    </mirror>
    <mirror>
    	 <!-- 阿里云的地址-->
         <id>alimaven</id>
         <name>aliyun maven</name>
         <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
         <mirrorOf>central</mirrorOf>
     </mirror>
 </mirrors>

  这样的好处是你可以优先从你的私服下载,私服没有了也可以通过阿里云镜像去下载。

3.2、私服账户配置

  同时还需要在 conf/setting.xml 中的 servers标签 配置成如下:

  <servers>
  	<!--release版本-->
	<server>  
       <id>releases</id>  
       <username>私服的账号</username>  
       <password>私服密码</password>  
    </server> 
    <!--snapshots版本-->
	<server>  
       <id>snapshots</id>  
       <username>私服的账号</username>  
       <password>私服密码</password>  
    </server> 
  </servers>

四、脚本

  能够使用这些脚本的前提是你的maven环境安装好了。不会的可以,可以问问度娘。(我这里是windows环境开发的,用的是bat,当然如果是linux,你就要编写xx.sh文件了)

4.1、安装脚本

install.bat

cd %~dp0
cd..

call mvn clean install -Dmaven.test.skip=true

cd bin
pause

4.2、发布脚本

deploy.bat

cd %~dp0
cd..

call mvn clean deploy -Dmaven.test.skip=true

cd bin
pause

4.3、打包脚本

package.bat

cd %~dp0
cd..

call mvn clean package -Ppack -X -Dmaven.test.skip=true

cd bin
pause

  这三个脚本,后面的项目会经常用到哦!

五、安装到本地或发布到私服

  执行我的脚本即可…

安装到本地

[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building bom 1.0.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ bom ---
[INFO] Deleting C:\workspace\study\spring-cloud-microservices\bom\target
[INFO]
[INFO] --- maven-install-plugin:2.4:install (default-install) @ bom ---
[INFO] Installing C:\workspace\study\spring-cloud-microservices\bom\pom.xml to C:\Users\admin\.m2\repository\cn\alian\microservice\bom\1.0.0-SNAPSHOT\bom-1.0.0-SNAPSHOT.pom
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.501 s
[INFO] Finished at: 2022-03-23T10:19:46+08:00
[INFO] Final Memory: 10M/243M
[INFO] ------------------------------------------------------------------------
Press any key to continue . . .

发布到私服

[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building bom 1.0.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ bom ---
[INFO]
[INFO] --- maven-install-plugin:2.4:install (default-install) @ bom ---
[INFO] Installing C:\workspace\study\spring-cloud-microservices\bom\pom.xml to C:\Users\admin\.m2\repository\cn\alian\microservice\bom\1.0.0-SNAPSHOT\bom-1.0.0-SNAPSHOT.pom
[INFO]
[INFO] --- maven-deploy-plugin:2.7:deploy (default-deploy) @ bom ---
Downloading: http://192.168.0.210:8081/nexus/content/repositories/snapshots/cn/alian/microservice/bom/1.0.0-SNAPSHOT/maven-metadata.xml
Uploading: http://192.168.0.210:8081/nexus/content/repositories/snapshots/cn/alian/microservice/bom/1.0.0-SNAPSHOT/bom-1.0.0-20220323.022110-1.pom
Uploaded: http://192.168.0.210:8081/nexus/content/repositories/snapshots/cn/alian/microservice/bom/1.0.0-SNAPSHOT/bom-1.0.0-20220323.022110-1.pom (12 KB at 117.0 KB/sec)
Downloading: http://192.168.0.210:8081/nexus/content/repositories/snapshots/cn/alian/microservice/bom/maven-metadata.xml
Uploading: http://192.168.0.210:8081/nexus/content/repositories/snapshots/cn/alian/microservice/bom/1.0.0-SNAPSHOT/maven-metadata.xml
Uploaded: http://192.168.0.210:8081/nexus/content/repositories/snapshots/cn/alian/microservice/bom/1.0.0-SNAPSHOT/maven-metadata.xml (601 B at 9.9 KB/sec)
Uploading: http://192.168.0.210:8081/nexus/content/repositories/snapshots/cn/alian/microservice/bom/maven-metadata.xml
Uploaded: http://192.168.0.210:8081/nexus/content/repositories/snapshots/cn/alian/microservice/bom/maven-metadata.xml (284 B at 4.6 KB/sec)
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.292 s
[INFO] Finished at: 2022-03-23T10:21:10+08:00
[INFO] Final Memory: 13M/243M
[INFO] ------------------------------------------------------------------------
Press any key to continue . . .

结语

  BOM全称是Bill Of Materials,译作材料清单,BOM的好处是用来管理一个工程的所有依赖版本信息,这样各个工程的版本比较一致,减少了不同版本中冲突和不兼容的问题,良好的项目都是从一个bom开始,本文介绍了它的创建,以及非常实用的脚本,我们接下里的工程都会用到的哦。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值