BOM全称是Bill Of Materials,译作材料清单。BOM本身并不是一种特殊的文件格式,而是一个普通的POM文件。只是在这个POM中,罗列出工程需要的所有依赖和其对应的版本。当其它工程引用BOM中罗列的jar包时,不用显示指定具体的版本,会自动使用BOM对应的jar版本。BOM的维护人员负责版本升级,并保证BOM中定义的jar包版本之间的兼容性。
工程基础父项目
<?xml version="1.0" encoding="UTF-8"?><project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.6.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.jyusun.origin</groupId><artifactId>origin-parent</artifactId><version>1.0.0-SNAPSHOT</version><name>${project.artifactId}</name><packaging>pom</packaging><description>服务基础父项目</description><!-- 许可信息 --><licenses><license><name>The Apache Software License, Version 2.0</name><url>http://www.apache.org/licenses/LICENSE-2.0.txt</url><comments>A business-friendly OSS license</comments></license></licenses><!-- 开发者信息 --><developers><developer><id>jyusun</id><name>ayu</name><email>jyusun@foxmail.com</email></developer></developers><properties><!-- JDK版本 --><java.version>1.8</java.version><maven.compiler.source>${java.version}</maven.compiler.source><maven.compiler.target>${java.version}</maven.compiler.target><!-- 基础编码字符集 --><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><charset.UTF8>UTF-8</charset.UTF8><!-- Projects 版本配置 --><origin.release.version>1.0.0.RELEASE</origin.release.version><origin.development.version>1.0.0-SNAPSHOT</origin.development.version><!-- Maven私服仓库地址 --><releases.url>http://nexus.jyusun.com/repository/maven-releases/</releases.url><snapshot.url>http://nexus.jyusun.com/repository/maven-snapshots/</snapshot.url></properties><!-- Nexus私服仓库部署配置 --><distributionManagement><repository><id>nexus-releases</id><url>${releases.url}</url></repository><snapshotRepository><id>nexus-snapshots</id><url>${snapshot.url}</url></snapshotRepository></distributionManagement></project>
维护一些私服信息,字符集编码等
依赖管理BOM
<?xml version="1.0" encoding="UTF-8"?><project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>com.jyusun.origin</groupId><artifactId>origin-parent</artifactId><version>1.0.0-SNAPSHOT</version><relativePath/></parent><groupId>com.jyusun.origin</groupId><artifactId>origin-dependencies</artifactId><version>1.0.0-SNAPSHOT</version><name>${project.artifactId}</name><packaging>pom</packaging><description>三方依赖管理</description><properties><!-- 工具版本管理 --><lombok.version>1.18.10</lombok.version><dubbo-serialization-kryo.version>2.6.8</dubbo-serialization-kryo.version><fastjson.version>1.2.75</fastjson.version><bitwalker.version>1.21</bitwalker.version></properties><dependencyManagement><dependencies><!-- caffeine guava--><dependency><groupId>com.github.ben-manes.caffeine</groupId><artifactId>guava</artifactId></dependency><!-- lombok --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>${lombok.version}</version><scope>compile</scope></dependency><!-- Kryo 序列化 --><dependency><groupId>com.alibaba</groupId><artifactId>dubbo-serialization-kryo</artifactId><version>${dubbo-serialization-kryo.version}</version></dependency><!-- 用户代理 --><dependency><groupId>eu.bitwalker</groupId><artifactId>UserAgentUtils</artifactId><version>${bitwalker.version}</version></dependency><!-- 阿里巴巴FastJson--><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>${fastjson.version}</version></dependency></dependencies></dependencyManagement></project>
此pom文件只做依赖管理:
<packaging>pom</packaging>打包方式是pom文件<dependencyManagement><dependencies>下定义的各种依赖的版本
工程父项目
origin-system-parent pom.xml
<?xml version="1.0" encoding="UTF-8"?><project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>com.jyusun.origin</groupId><artifactId>origin-parent</artifactId><version>1.0.0-SNAPSHOT</version></parent><artifactId>origin-system-parent</artifactId><version>1.0.0-SNAPSHOT</version><name>${project.artifactId}</name><packaging>pom</packaging><description>系统父项目</description><properties><!-- Spring Projects--><spring-cloud.version>Hoxton.SR9</spring-cloud.version><spring-cloud-alibaba.version>2.2.3.RELEASE</spring-cloud-alibaba.version></properties><!-- Origin 依赖管理 --><dependencyManagement><dependencies><!-- 三方依赖管理--><dependency><groupId>${project.groupId}</groupId><artifactId>origin-dependencies</artifactId><version>${origin-dependencies.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement></project>
此pom文件维护引用bom文件、maven插件等
示例工程引用
在工程中直接指向父项目,版本即可传递过来
<?xml version="1.0" encoding="UTF-8"?><project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>com.jyusun.origin</groupId><artifactId>origin-system-parent</artifactId><version>1.0.0-SNAPSHOT</version></parent><artifactId>origin-commons-core</artifactId><name>${project.artifactId}</name><version>1.0.0-SNAPSHOT</version><packaging>jar</packaging><description>公共-核心工具</description><dependencies><!-- Lombok--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><!-- slf4j-api --><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId></dependency><!-- 用户代理信息处理 --><dependency><groupId>eu.bitwalker</groupId><artifactId>UserAgentUtils</artifactId></dependency><!-- Alibaba fastjson --><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId></dependency><!-- caffeine guava--><dependency><groupId>com.github.ben-manes.caffeine</groupId><artifactId>guava</artifactId></dependency><!-- Apache Lang 处理 --><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId></dependency><!-- Apache Collections 处理 --><dependency><groupId>org.apache.commons</groupId><artifactId>commons-collections4</artifactId></dependency><!-- 格式验证 --><dependency><groupId>io.swagger</groupId><artifactId>swagger-annotations</artifactId></dependency><dependency><groupId>org.hibernate.validator</groupId><artifactId>hibernate-validator</artifactId><scope>compile</scope></dependency><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><scope>provided</scope></dependency></dependencies></project>
示例工程引用
指定父项目,直接引用依赖的jar即可
