拥有自己的代码库真的很酷–如何开发一个SDK

日复一日编程,年复一年造轮

前言

不知你是否和我一样,对编程解决问题有一种 ” 懒人执着 “ :已有代码能解决的,一律不重复造轮子

写过的重要代码就拷贝到自己的文本文件里整理起来,下次遇到相同问题直接cv,还记的我一个水仙花算法的代码应付了整个大学遇到的水仙花问题

即了解代码怎么实现,也节省了重复编写代码的时间,看上去真是一举两得

但当我存储的代码块越来越多,管理则成了一个问题:

试问:你希望看满满一大页的代码块来找你的目标代码,还是顺手就自己编写完那简单的轮子?

何况固定的代码并不能应对不同的场景,没准你还要理解和修改呢

于是在大二那年,我的项目用上了Maven,一个开源的依赖管理工具,你想要的功能大多都可以直接搜索下载依赖

几乎彻底解决了造轮子问题,但仍然有问题:

其一:尽管依赖有很多,但毕竟不是自己写的,对于功能实现和后续优化可能并没有那么有帮助

其二:下载的依赖是否匹配项目也是一个问题,名称相似而不相同的依赖也有不少,如何选择也会影响之后的开发

既然又希望理解原理,又不想后续重复造轮子

为什么不自己写常用的依赖呢?

  • 通用的类,固定的常量,组件连接方法,超类的模板,常用的工具类等,都可以自己来写,打包成为依赖,自己来用呀

既了解如何实现,方便后续优化时进行更改,同时也利用Maven解决了管理问题,不用日后重复造轮子

步骤

新建项目(Springboot - spring Initializr)

打开IDEA,选择新建一个springboot项目

删除文件

删除springboot-starter-test依赖,删除build组件,删除Application主类,删除test中的测试方法

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 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.7.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <groupId>com.itegg</groupId>
    <artifactId>common</artifactId>
    <version>0.0.1</version>
    <name>common</name>
    <description>ITegg common package</description>
    <properties>
        <java.version>8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

    </dependencies>

</project>

项目结构:

image-20231021161317068

新建配置类

在刚刚删除主类的地方生成新的配置类ITeggTestConfig(名字自己取就好)

image-20231021161001456

package com.itegg.common;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@ConfigurationProperties("itegg.test")
@Data		   // lombok注解,帮助把属性设置get和set方法,这里暂时没用上
@ComponentScan // 扫包注解
public class ITeggTestConfig {

}

新建一个Util包,创建一个Math类

image-20231021160913023

public class Math {

    public int Addition(int a, int b) {
        return a + b;
    }

    public int Subtraction(int a, int b) {
        return a - b;
    }

    public int Multiplication(int a, int b) {
        return a * b;
    }

    public int Division(int a, int b) {
        if(b == 0) return 0;
        return a / b;
    }
}

在resource下新建文件夹META-INF

在META-INF下新建一个spring.factories文件,指引开启项目(后面的com.itegg.common.ITeggTestConfig请改为上述创建的配置类名称)

image-20231021161506238

# spring boot starter
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.itegg.common.ITeggTestConfig

打包

执行右侧Maven栏中的install命令进行打包

image-20231021161628013

调用

复制该项目中的groupId,artifactId,version信息,放置在目标项目pom.xml文件中的dependency里

    <dependency>
        <groupId>com.itegg</groupId>
        <artifactId>common</artifactId>
        <version>0.0.1</version>
    </dependency>

刷新maven依赖,后续就像使用其他maven的依赖一样

public class Test {
    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        Math math = new Math();
        System.out.println(math.Addition(a, b));
        System.out.println(math.Subtraction(a, b));
        System.out.println(math.Multiplication(a, b));
        System.out.println(math.Division(a, b));
    }
}
--------
return:
30
-10
200
0

当然,这种只是一个再简单不过的例子,但不积跬步无以至千里,这样一步步建立自己的代码库,真的很酷!

顺带一提,这只是在本地maven中加载了依赖,其他电脑是使用不了的,如果希望上传到网上公开给大家使用的话,要去maven仓库注册账号发布

怎么样,读完了不想动手试试吗?

坚持日复一日编程,打破年复一年造轮