自定义Spring Boot Starter项目并且在其他项目中通过pom引入使用

作者:劝导小子日期:2025/10/19

1、创建starter项目

我电脑只有JDK 8,但是创建项目的时候最低只能选择17,后续创建完后去修改即可

在这里插入图片描述

2、项目结构

  1. 删除主启动类Application:Starter不需要启动类
  2. 删除配置文件application.properties:Starter不需要自己的配置文件
  3. 删除test里面的测试启动类

在resources下创建META-INF文件夹

在这里插入图片描述

3、修改JDK

修改成JDK8,如果你有更高的版本请切换

在这里插入图片描述

4、配置pom.xml

1<?xml version="1.0" encoding="UTF-8"?>
2<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
4    <modelVersion>4.0.0</modelVersion>
5    <!-- 继承SpringBoot父项目 -->
6    <parent>
7        <groupId>org.springframework.boot</groupId>
8        <artifactId>spring-boot-starter-parent</artifactId>
9        <version>2.6.3</version> <!-- 适配JDK 8 的版本 -->
10        <relativePath/> <!-- lookup parent from repository -->
11    </parent>
12    <!-- 项目基本信息 -->
13    <groupId>com.ckm</groupId>
14    <artifactId>starter</artifactId>
15    <version>0.0.1-SNAPSHOT</version>
16    <name>my-starter</name>
17    <description>my-starter</description>
18    <url/>
19    <licenses>
20        <license/>
21    </licenses>
22    <developers>
23        <developer/>
24    </developers>
25    <scm>
26        <connection/>
27        <developerConnection/>
28        <tag/>
29        <url/>
30    </scm>
31
32    <properties>
33        <java.version>8</java.version> <!-- JDK 8 -->
34    </properties>
35    <dependencies>
36        <dependency>
37            <groupId>org.springframework.boot</groupId>
38            <artifactId>spring-boot-starter</artifactId>
39        </dependency>
40
41        <!-- 可选:配置元数据(后面文章会讲) -->
42        <dependency>
43            <groupId>org.springframework.boot</groupId>
44            <artifactId>spring-boot-configuration-processor</artifactId>
45            <optional>true</optional>
46        </dependency>
47
48        <!-- 可选:Lombok,简化代码 -->
49        <dependency>
50            <groupId>org.projectlombok</groupId>
51            <artifactId>lombok</artifactId>
52            <optional>true</optional>
53        </dependency>
54    </dependencies>
55
56    <build>
57        <plugins>
58            <plugin>
59                <groupId>org.springframework.boot</groupId>
60                <artifactId>spring-boot-maven-plugin</artifactId>
61                <configuration>
62                    <skip>true</skip> <!-- 打包时跳过主启动类,必须加这个不然打包会报错 -->
63                </configuration>
64            </plugin>
65        </plugins>
66    </build>
67
68</project>
69
70

注意这里的<optional>

1<!-- Starter项目 -->
2<!-- Starter项目 -->
3<dependency>
4    <groupId>org.projectlombok</groupId>
5    <artifactId>lombok</artifactId>
6    <optional>true</optional>  ← 注意这里
7</dependency>
8

<optional>true</optional>的意思是Starter项目自己可以用Lombok,引用Starter项目的项目不会自动引入Lombok

5、创建业务类、自动配置类、配置属性类

5.1 业务类

1package com.ckm.starter;
2
3/**
4 * Hello服务类
5 * 提供简单的问候功能
6 */
7public class HelloService {
8
9    private String prefix;  // 前缀
10    private String suffix;  // 后缀
11
12    public HelloService(String prefix, String suffix) {
13        this.prefix = prefix;
14        this.suffix = suffix;
15    }
16
17    /**
18     * 说Hello
19     * @param name 名字
20     * @return 问候语
21     */
22    public String sayHello(String name) {
23        return prefix + " " + name + " " + suffix;
24    }
25}
26
27

5.2 自动配置类(核心)

1package com.ckm.starter;
2
3import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
4import org.springframework.boot.context.properties.EnableConfigurationProperties;
5import org.springframework.context.annotation.Bean;
6import org.springframework.context.annotation.Configuration;
7
8/**
9 * Hello自动配置类
10 * SpringBoot启动时会自动加载这个配置类
11 */
12@Configuration  // ← 标记为配置类
13@EnableConfigurationProperties(HelloProperties.class)  // ← 启用配置属性
14public class HelloAutoConfiguration {
15
16    /**
17     * 注册HelloService到Spring容器
18     * @param properties 配置属性
19     * @return HelloService实例
20     */
21    @Bean  // ← 注册为Bean
22    @ConditionalOnMissingBean  // ← 如果容器中没有HelloService才注册
23    public HelloService helloService(HelloProperties properties) {
24        return new HelloService(properties.getPrefix(), properties.getSuffix());
25    }
26}
27
28

5.3 配置属性类

1package com.ckm.starter;
2
3import org.springframework.boot.context.properties.ConfigurationProperties;
4
5/**
6 * Hello配置属性类
7 * 对应配置文件中的 hello.* 配置
8 */
9@ConfigurationProperties(prefix = "hello")
10public class HelloProperties {
11
12    /**
13     * 前缀,默认值:Hello
14     */
15    private String prefix = "Hello";
16
17    /**
18     * 后缀,默认值:!
19     */
20    private String suffix = "!";
21
22    // Getter 和 Setter
23    public String getPrefix() {
24        return prefix;
25    }
26
27    public void setPrefix(String prefix) {
28        this.prefix = prefix;
29    }
30
31    public String getSuffix() {
32        return suffix;
33    }
34
35    public void setSuffix(String suffix) {
36        this.suffix = suffix;
37    }
38}
39
40

三个类的关系:

1HelloProperties(配置)
2        ↓ 读取配置文件
3HelloAutoConfiguration(自动配置)
4        ↓ 创建并注册Bean
5HelloService(业务类)
6        ↓ 被注入到Spring容器
7使用方可以 @Autowired 使用
8

6、创建spring.factories

在resource的META-INF文件夹下创建spring.factories
文件内容:

1# Auto Configure
2org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
3com.ckm.starter.HelloAutoConfiguration
4

如果有多个可以使用逗号分割,如:

1org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
2com.ckm.starter.HelloAutoConfiguration,\
3com.ckm.starter.OtherAutoConfiguration
4

格式解读:

1org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
23这是固定的key,SpringBoot会读取这个key
4
5com.ckm.starter.HelloAutoConfiguration
67你的自动配置类的全限定名
8

SpringBoot约定必须是读取META-INF/spring.factories

1// SpringBoot源码(简化版)
2public class SpringFactoriesLoader {
3    public static final String FACTORIES_RESOURCE_LOCATION = 
4        "META-INF/spring.factories";  // ← 看!写死的路径
5    
6    public static List<String> loadFactoryNames() {
7        // 扫描所有jar包的 META-INF/spring.factories
8        // 读取配置
9        // 加载自动配置类
10    }
11}
12

7、打包

Maven三大打包命令
命令对比:

命令全称作用结果
package打包编译+测试+打jar包jar包在target目录
install安装package + 部署到本地仓库jar包在本地Maven仓库
deploy部署install + 部署到远程仓库jar包在本地+远程仓库

我们这里测试直接使用install打包

在这里插入图片描述

8、其他项目使用

8.1 在其他项目pom.xml中引入

1<dependency>
2    <groupId>com.ckm</groupId>
3    <artifactId>starter</artifactId>
4    <version>0.0.1-SNAPSHOT</version>
5</dependency>
6

在这里插入图片描述

8.2 编写测试类

1package com.ckm.ball;
2
3import com.ckm.starter.HelloService;
4import org.junit.jupiter.api.Test;
5import org.springframework.beans.factory.annotation.Autowired;
6import org.springframework.boot.test.context.SpringBootTest;
7
8@SpringBootTest
9class AboutBallBootApplicationTests {
10
11    @Autowired
12    private HelloService helloService;
13    @Test
14    void contextLoads() {
15        System.out.println(helloService.sayHello("你好"));
16    }
17
18}
19
20

在这里插入图片描述

8.3 自定义配置hello属性值

1hello:
2  prefix: "世界"
3  suffix: "。"
4

在这里插入图片描述

本文参考:https://blog.csdn.net/2301%5F78967994/article/details/152665942

9、实现可插拔Starter

https://blog.csdn.net/2301%5F78967994/article/details/152666034

10、配置元数据让你的Starter拥有智能提示

https://blog.csdn.net/2301%5F78967994/article/details/152666090

随着版本的更新,现在不用自动配置元数据就能识别出来了

没有配置元数据:
在这里插入图片描述


自定义Spring Boot Starter项目并且在其他项目中通过pom引入使用》 是转载文章,点击查看原文


相关推荐


RabbitMQ消息传输中Protostuff序列化数据异常的深度解析与解决方案
Mr.45672025/10/18

目录 问题背景 环境配置 使用的依赖 测试对象 初始代码(有问题的版本) 问题分析 1. 初步排查 2. 关键发现 3. RabbitTemplate的默认行为分析 4. SimpleMessageConverter的处理机制 深入理解消息转换 消息转换器的层次结构: 而直接发送 Message: 解决方案 方案1:直接使用Message对象(推荐) 方案2:配置自定义MessageConverter 问题根因总结 经验教训 结论 最后最后附上序列化工具:


Apache Doris 与 ClickHouse:运维与开源闭源对比
SelectDB技术团队2025/10/16

引言 在当今数据驱动的商业环境中,OLAP(在线分析处理)数据库的选择对企业的数据分析能力和运维成本有着深远影响。Apache Doris 和 ClickHouse 作为业界领先的高性能 OLAP 数据库,各自在不同场景下展现出独特优势。 Apache Doris 以其优秀的宽表查询能力、多表 JOIN 性能、实时更新、search 以及湖加速特性而著称。ClickHouse 同样在宽表处理方面表现出色,其丰富的分析函数库和高性能单表聚合能力备受青睐。 然而,从运维角度来看,两者在存算分离


统一高效图像生成与编辑!百度&新加坡国立提出Query-Kontext,多项任务“反杀”专用模型
AI生成未来2025/10/15

论文链接:https://arxiv.org/pdf/2509.26641 亮点直击 Query-Kontext,一种经济型集成多模态模型(UMM),能够将视觉语言模型(VLMs)中的多模态生成推理与扩散模型执行的高保真视觉渲染相分离。 提出了一种三阶段渐进式训练策略,该策略逐步将 VLM 与越来越强大的扩散生成器对齐,同时增强它们在生成推理和视觉合成方面的各自优势。 提出了一种精心策划的数据集收集方案,以收集真实、合成和经过仔细筛选的开源数据集,涵盖多样的多模态参考到图像


微美全息(NASDAQ:WIMI)融合区块链+AI+IoT 三大技术,解锁物联网入侵检测新范式
爱看科技2025/10/14

在全面数字化转型的浪潮中,区块链、网络安全、人工智能与机器学习不再是孤立的技术概念,而是相互交织、共同推动行业进步的强大引擎。这些技术的紧密结合,特别是在物联网(IoT)领域的应用,正引领着一场前所未有的安全、效率与智能化变革。   实际,区块链技术以其去中心化、安全性和不可篡改性,为物联网数据存储和共享提供了全新的解决方案。而人工智能与机器学习技术的应用,使得物联网系统具备了自我学习和优化的能力。机器学习算法能够分析海量数据,识别出潜在的安全威胁或性能瓶颈,为系统提供精准的决策支持。


基于旗鱼算法优化卷积神经网络结合长短期记忆网络与注意力机制(CNN-LSTM-Attention)的风电场发电功率预测
智能算法研学社(Jack旭)2025/10/12

基于旗鱼算法优化卷积神经网络结合长短期记忆网络与注意力机制(CNN-LSTM-Attention)的风电场发电功率预测 文章目录 基于旗鱼算法优化卷积神经网络结合长短期记忆网络与注意力机制(CNN-LSTM-Attention)的风电场发电功率预测1.CNN原理2.LSTM原理3.注意力机制4.CNN-LSTM-Attention5.风电功率预测5.1 数据集6.基于旗鱼算法优化的CNN-LSTM-Attention7.实验结果8.Matlab代码 1.CNN原理 卷积神经


C++ const 用法全面总结与深度解析
oioihoii2025/10/10

1. const 基础概念 const 关键字用于定义不可修改的常量,是C++中确保数据只读性和程序安全性的核心机制。它可以应用于变量、指针、函数参数、返回值、成员函数等多种场景,深刻影响代码的正确性和性能。 1.1 本质与编译期处理 const变量在编译时会被编译器严格检查,任何修改尝试都会导致编译错误。与C语言不同,C++中的const变量(尤其是全局const)通常不会分配内存,而是直接嵌入到指令中(类似#define),但在以下情况会分配内存: 取const变量地址时 const变量为


php artisan db:seed执行的时候遇到报错
快支棱起来2025/10/9

INFO Seeding database. Illuminate\Database\QueryException SQLSTATE[42S22]: Column not found: 1054 Unknown column 'email_verified_at' in 'field list' (Connection: mysql, SQL: insert into users (name, email, email_verified_at, password, remember_token,


apache POI 万字总结:满足你对报表一切幻想
大鱼七成饱2025/10/7

背景 国庆期间接了个兼职,处理机构的几张Excel报表。初次沟通,感觉挺简单,接入Easyexcel(FastExcel),然后拼lamda表达式就跑出来了。不过毕竟工作了这些年,感觉没这么简单。后面找业务方详细聊了一次,将需求落到纸面上。逐行研究了下BRD,有点挠头,跑数加各种样式,兼容新老版本,老方案是不行了。综合对比,最终选了老牌的 Apache POI 实现,下面说下为啥选POI,还有POI怎么用,包含样式、公式、动态表头、安全防范、百万级数据导入导出等功能。 一、技术选型 如果实现该


【转载】前验光师如何通过聪明模仿而非蛮干构建月收入3.5万美元的SaaS应用
是魔丸啊2025/10/6

转载 大多数人都认为你需要在科技领域拥有突破性的想法才能成功。 Samuel Rondot的想法与众不同。他的整个行动手册建立在一个简单的规则上:不要重新发明轮子——只要让它变得1%更好。 这种心态帮助他辞去了验光师的工作,从零开始自学编程,并推出了三个现在每月收入3.5万美元的SaaS应用。 以下是他如何做到的。 从验光师到自学程序员 Samuel从未计划成为一名程序员。几年前,他在眼镜行业工作,完全没有编程经验。 什么改变了?他想重建一个自己正在使用的Instagram工具——这一次,完全靠


免费领源码-Spring boot的物流管理系统 |可做计算机毕设Java、Python、PHP、小程序APP、C#、爬虫大数据、单片机、文案
vx_dmxq2112025/10/5

目   录 摘  要 Abstract 1  前言 1.1 设计目的 1.2 设计思路 1.3 国内外研究现状 2  相关技术 2.1  Java语言 2.2 MySQL数据库 2.3 Spring Boot框架 2.4 B/S模式 3  系统分析 3.1  可行性分析 3.2  系统需求分析 3.2.1  功能性分析 3.2.2  非功能性需求分析 3.3  系统用例分析 3.3.1  注

首页编辑器站点地图

Copyright © 2025 聚合阅读

License: CC BY-SA 4.0