目录
- 一、创建bom工程
- 1.1、第一步
- 1.2、第二步
- 1.3、第三步
- 二、pom文件配置
- 三、maven私服配置
- 3.1、镜像源配置
- 3.2、私服账户配置
- 四、脚本
- 4.1、安装脚本
- 4.2、发布脚本
- 4.3、打包脚本
- 五、安装到本地或发布到私服
- 结语
一、创建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、镜像源配置
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开始,本文介绍了它的创建,以及非常实用的脚本,我们接下里的工程都会用到的哦。