手撸一个Spring Boot Starter并上传到Maven中央仓库

手撸一个Spring Boot Starter并上传到Maven中央仓库,可以大致分成以下步骤:

一、准备工作

1. 创建一个Maven项目

在本地创建一个Maven项目,包含一个POM文件和一个src目录。可以使用Eclipse、IntelliJ IDEA等开发工具,也可以手工创建。

2. 引入相关依赖

在POM文件中引入Spring Boot和相关依赖,并指定版本号,例如:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.5.4</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
</dependency>

3. 定义Starter核心类

定义一个类作为Starter的核心类,该类通常实现了Spring Boot中AutoConfiguration接口,例如:

@Configuration
@EnableConfigurationProperties(MyProperties.class)
@ConditionalOnClass(MyService.class)
@EnableConfigurationProperties(MyProperties.class)
public class MyAutoConfiguration {

    @Autowired
    private MyProperties myProperties;

    @Bean
    @ConditionalOnMissingBean
    public MyService myService() {
        return new MyService(myProperties.getName());
    }

}

二、创建Starter所需的资源

1.创建application.properties

在资源目录src/main/resources下创建application.properties文件,该文件用于定义Starter所需的配置信息,例如:

my.name=default_value

2.创建README.md

在项目根目录下创建README.md文件,用于说明该Starter的使用方式、功能等信息。

三、测试Starter

1. 创建测试项目

在本地创建一个测试项目,引入刚才创建的Starter,并写一个简单的测试类,例如:

@SpringBootTest
class MyApplicationTests {

    @Autowired
    private MyService myService;

    @Test
    void contextLoads() {
        assertNotNull(myService);
    }

}

2. 执行测试

运行测试类,查看是否能够正常加载配置文件,并注入MyService。

四、打包并上传到Maven中央仓库

1. 打包

执行mvn clean install命令,将Starter打包成jar包。

2. 上传至Maven中央仓库

$ mvn deploy -Prelease -DskipTests
  • 执行Staging-RepoClose按钮,等待审核通过之后点击Release按钮。

至此,手撸的Spring Boot Starter已经成功上传至Maven中央仓库,并可以作为依赖被其他项目引用使用。

示例一:MyTranslatorStarter

以一个简单的示例—翻译器为例,手撸一个Spring Boot Starter,并上传到Maven中央仓库。

  1. 创建Maven项目
$ mvn archetype:generate -DgroupId=com.example -DartifactId=my-translator-starter -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
  1. 引入依赖
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.5.4</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
</dependency>
  1. 创建核心类
@Configuration
@EnableConfigurationProperties(MyTranslatorProperties.class)
@EnableAutoConfiguration
public class MyTranslatorAutoConfiguration {

    @Autowired
    private MyTranslatorProperties myTranslatorProperties;

    @Bean
    @ConditionalOnMissingBean
    public Translator translator() {
        return new Translator(myTranslatorProperties.getFrom(), myTranslatorProperties.getTo());
    }
}
  1. 创建配置文件

在resources目录下创建application.properties文件

my.translator.from=en
my.translator.to=zh
  1. 创建测试类
@SpringBootTest
class MyTranslatorStarterApplicationTests {

    @Autowired
    private Translator translator;

    @Test
    void contextLoads() {
        assertNotNull(translator);
        assertEquals("你好,世界!", translator.translate("Hello, World!"));
    }

}
  1. 打包并上传至Maven中央仓库

  2. 在项目中引入该Starter,并使用

在pom.xml中引入该Starter

<dependency>
    <groupId>com.example</groupId>
    <artifactId>my-translator-starter</artifactId>
    <version>1.0.0</version>
</dependency>

在main方法中使用

@SpringBootApplication
public class DemoApplication {

    @Autowired
    private Translator translator;

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

    @GetMapping("/hello")
    public String hello(@RequestParam("word") String word) {
        return translator.translate(word);
    }
}

现在运行该程序,并打开浏览器访问
http://localhost:8080/hello?word=Hello,%20World!

你将会看到:“你好,世界!”几个汉字。

示例二:MyDockerStarter

以Docker的Java API-kit为例实现一个Starter,支持Java应用创建、打架docker镜像、上传至容器仓库等操作。

  1. 创建Maven项目
$ mvn archetype:generate -DgroupId=com.example -DartifactId=my-docker-starter -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
  1. 引入依赖
<dependency>
    <groupId>com.github.docker-java</groupId>
    <artifactId>docker-java-core</artifactId>
    <version>3.2.5</version>
</dependency>
<dependency>
    <groupId>com.github.docker-java</groupId>
    <artifactId>docker-java</artifactId>
    <version>3.2.5</version>
</dependency>
  1. 创建核心类
@Configuration
public class DockerAutoConfiguration {

    @Value("${docker.registry.url}")
    private String registryUrl;

    @Value("${docker.registry.username}")
    private String registryUsername;

    @Value("${docker.registry.password}")
    private String registryPassword;

    @Autowired
    private DockerClient dockerClient;

    @Bean
    public DockerUtil dockerUtil() {
        return new DockerUtil(dockerClient, registryUrl, registryUsername, registryPassword);
    }

    @Bean
    @ConditionalOnMissingBean
    public DockerClient dockerClient() {
        DefaultDockerClientConfig config = DefaultDockerClientConfig.createDefaultConfigBuilder().build();
        return DockerClientBuilder.getInstance(config).build();
    }

}
  1. 创建配置文件

在resources目录下创建application.properties文件,并填写配置信息

docker.registry.url=https://hub.docker.com/v2
docker.registry.username=MyUserName
docker.registry.password=MyPassword
  1. 创建测试类

详见:https://github.com/malathion/my-docker-starter/blob/main/src/test/java/com/example/DockerStarterApplicationTests.java

  1. 打包并上传至Maven中央仓库

  2. 在项目中引入该Starter,并使用

在pom.xml中引入该Starter

<dependency>
    <groupId>com.example</groupId>
    <artifactId>my-docker-starter</artifactId>
    <version>1.0.0</version>
</dependency>
@Autowired
private DockerUtil dockerUtil;

@PostMapping("/upload/image/{imageName}")
public void buildAndPushImage(@PathVariable("imageName") String imageName,
        @RequestParam("dockerfile") String dockerfile,
        @RequestParam("buildpath") String buildpath,
        @RequestParam(name = "tag", defaultValue = "latest") String tag) {
    dockerUtil.buildAndPushImage(imageName, tag, dockerfile, Paths.get(buildpath));
}

至此,一个简单的Java应用就可以被打包成docker镜像,并上传至容器仓库了。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:手撸一个Spring Boot Starter并上传到Maven中央仓库 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • 基于Java 数组内存分配的相关问题

    关于基于Java数组内存分配的相关问题,以下是详细的攻略: 1. Java数组内存分配概述 在Java中,数组是一种非常常见的数据结构,它由一些同类型的元素组成。我们可以通过数组来存储和操作多个相同类型的数据。Java数组内存分配的问题,实际上是与Java的内存管理机制有关的。 Java中的内存管理机制有两部分,一部分是Java虚拟机(JVM)自己的内存管理…

    Java 2023年5月26日
    00
  • java工具类StringUtils使用实例详解

    Java工具类StringUtils使用实例详解 什么是StringUtils StringUtils 是一个Apache Commons Lang库中的工具类,提供一系列处理字符串的静态方法。该类提供了一些我们常用的字符串操作方法,比如字符串为空、字符串不为空或者为null、去除字符串两端的空格等。 StringUtils的导入方式 如需使用StringU…

    Java 2023年5月27日
    00
  • Mybatis自动创建表和更新表结构

    下面给您详细讲解Mybatis自动创建表和更新表结构的完整攻略。 什么是Mybatis Mybatis是一种基于Java语言的开源持久化框架,它的主要功能是将Java对象映射到关系型数据库。 Mybatis自动创建表和更新表结构的配置方法 配置实体类 首先我们需要在实体类中添加注解,用来指定表名、字段名和主键。 下面是一个示例: public class U…

    Java 2023年5月20日
    00
  • java tapestry5 布局 参数的处理

    下面我将为你详细讲解“Java Tapestry5 布局参数的处理”的完整攻略。 什么是 Tapestry5 布局参数? 在 Tapestry5 中,布局参数是一种可重复利用的组件,在组合多个组件以创建页面模板时特别有用。布局组件提供了一种创建大量页面模板的方法,这些模板共享相同的标头、页脚和菜单结构等元素。 布局参数则是在这些布局组件中动态传递的一些参数,…

    Java 2023年6月15日
    00
  • IDEA-Maven项目的jdk版本设置方法

    下面就详细讲解“IDEA-Maven项目的jdk版本设置方法”的完整攻略。 第一步:确认jdk版本 首先要确认本地已经安装了需要使用的jdk版本,打开终端输入以下命令: java -version 如果显示的版本号和你需要使用的版本号一致,则可以跳过第二步。如果版本号不一致,需要安装或者设置jdk环境变量。这里不再详述。 第二步:设置项目jdk版本 2.1 …

    Java 2023年5月20日
    00
  • Java中线程上下文类加载器超详细讲解使用

    Java中线程上下文类加载器超详细讲解使用 前言 在Java多线程中,经常会出现跨类加载器的情况,例如Web容器中的应用程序的类加载器和Java线程在使用的类加载器可以是不同的实例。而在Java中,不同的类加载器对于同一个类的加载得到的Class对象实例是不同的,这样就会导致在不同的类加载器中创建的对象实例无法相互转换,从而引发一系列问题。为此,Java中引…

    Java 2023年5月19日
    00
  • Java中的运算符重载是什么?

    Java中的运算符重载是指允许在自定义的类中对运算符(如+、-、*、/等)进行重新定义,以便对自定义的类进行运算。运算符重载的本质是将运算符号的含义进行扩展,使得一种运算符号能够被用于多种类型的数据操作。 运算符重载是实现多态性的一个重要技巧。对于类中的不同对象,运算符的行为可以有所不同,这样可以减少代码的冗余,提高代码的复用性。 运算符重载实现起来比较简单…

    Java 2023年4月27日
    00
  • Java使用POI实现导出Excel的方法详解

    首先我们来讲解一下Java使用POI实现导出Excel的方法详解。 一、POI介绍 Apache POI是Apache软件基金会的开源项目,是用于Java编程语言处理Microsoft Office格式文件的开源库。POI提供API给用户对Excel、Word和PowerPoint等文件进行读和写的功能。POI提供了对Excel 97-2003及Excel …

    Java 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部