前言
最近有一个需求,需要对接腾讯位置服务 WebService API,但找来找去发现官方并没有提供 Java SDK,考虑到后续其他项目也会有这个需求后,干脆索性自己封装一个 starter,并希望上传 Maven 中央仓库,实现像集成 MyBatis Plus 一样方便,直接引入依赖即可,让 Spring Boot 完成自动装配,并不需要关心具体配置以及代码,实现松耦合。
自定义
命名规范
Spring 官方提供 starter 通常命名为 spring-boot-starter-{name} :
Spring 官方建议非官方提供的 starter 命名应遵守 {name}-spring-boot-starter 格式
比如 mybatis 出品:mybatis-spring-boot-starter
创建项目
starter 是基于 Spring Boot 项目创建而成,使用 IDEA 初始化 Spring Boot 项目后,删除 src
文件夹,并新建两个 Module
,分别是 {name}-spring-boot-starter(启动器)
以及 {name}-spring-boot-autoconfigure(自动配置包)
,新建完成后删除启动类。
文件夹命名规范参考:mybatis-spring-boot-starter,项目架构大致如下:
bash
复制代码
├─pom.xml │ ├─lbs-spring-boot-autoconfigure │ │ pom.xml │ │ │ └─src │ ├─main │ │ ├─java │ │ │ └─com │ │ │ └─starimmortal │ │ │ │ │ └─resources │ └─test │ └─java └─lbs-spring-boot-starter │ pom.xml │ └─src ├─main │ ├─java │ │ └─com │ │ └─starimmortal │ │ │ └─resources └─test └─java
提示:最终版本包含了 lbs-client-core 业务核心模块,在这里没有体现,根据个人开发习惯不同,可以选择将业务代码写在
{name}-spring-boot-autoconfigure
下,但这里还是推荐将业务核心功能单独封装成一个模块。
模块依赖
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 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <packaging>pom</packaging> <modules> <module>lbs-client-core</module> <module>lbs-spring-boot-starter</module> <module>lbs-spring-boot-autoconfigure</module> </modules> <groupId>com.starimmortal</groupId> <artifactId>lbs-spring-boot</artifactId> <version>1.0.0</version> <name>lbs-spring-boot</name> <description>Tencent LBS WebService API Spring Boot Starter</description> <url>https://github.com/ElanYoung/lbs-spring-boot/tree/main</url> <properties> <argLine>-Dfile.encoding=UTF-8</argLine> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <maven.compiler.encoding>UTF-8</maven.compiler.encoding> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <java.version>1.8</java.version> <spring-boot-dependencies.version>2.7.12</spring-boot-dependencies.version> <lombok.version>1.18.28</lombok.version> </properties> <dependencyManagement> <dependencies> <!-- Spring Boot 依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>${spring-boot-dependencies.version}</version> <type>pom</type> <scope>import</scope> </dependency> <!-- Lombok 插件 --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>${lombok.version}</version> </dependency> </dependencies> </dependencyManagement> </project>
开源项目强烈建议使用 dependencyManagement 来管理 Maven 依赖,否则可能会出现版本兼容问题