如何将自定义起步依赖打成包

news2024/11/20 1:30:10

说明:之前做过一个自定义的OSS起步依赖(http://t.csdn.cn/9aYr5),但是当时只是新建了一个Demo模块来测试自定义起步依赖能成功使用,本文介绍如何把自定义的起步依赖打成jar包,供其他项目或其他人引入依赖就可以使用。

第一步:自定义起步依赖

依赖提供给他人使用,应该考虑自定义依赖的内容尽可能精简、且尽可能减低使用门槛。

OSS配置类

不要使用@Data注解,因为使用该注解,需要引入lombok依赖

import org.springframework.boot.context.properties.ConfigurationProperties;

/**
 * OSS配置类
 */
@ConfigurationProperties(prefix = "aliyun.oss")
public class OssProperties {
    private String endpoint;
    private String accessKeyId;
    private String accessKeySecret;
    private String bucketName;

    public String getEndpoint() {
        return endpoint;
    }

    public void setEndpoint(String endpoint) {
        this.endpoint = endpoint;
    }

    public String getAccessKeyId() {
        return accessKeyId;
    }

    public void setAccessKeyId(String accessKeyId) {
        this.accessKeyId = accessKeyId;
    }

    public String getAccessKeySecret() {
        return accessKeySecret;
    }

    public void setAccessKeySecret(String accessKeySecret) {
        this.accessKeySecret = accessKeySecret;
    }

    public String getBucketName() {
        return bucketName;
    }

    public void setBucketName(String bucketName) {
        this.bucketName = bucketName;
    }
}

OSS工具类

这里将阿里云的文件(Multipart)上传流,转为了字节上传流,因为文件上传流需要引入SpringBoot-web的依赖,然后为了避免上传的文件在OSS上不会被重复,使用方法时需要加两个值,一个是文件字节流,一个是文件名(带扩展名)。

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.stereotype.Component;

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;


/**
 * OSS功能实现类
 */
@Component
@EnableConfigurationProperties(OssProperties.class)
public class OssUtils {

    @Autowired
    private OssProperties ossProperties;

    /**
     * 实现上传图片到OSS
     */
    public String upload(byte[] bytes, String fullName) throws IOException {

        // 获取上传的文件的输入流
        InputStream inputStream = new ByteArrayInputStream(bytes);

        // 避免文件覆盖
        String fileName = UUID.randomUUID() + fullName.substring(fullName.lastIndexOf("."));

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

        String date = sdf.format(new Date());

        // 上传到OSS Bucket下面的image文件夹内
        fileName =  "image"+ "/" + date + "/" + fileName;

        // 上传文件到 OSS
        OSS ossClient = new OSSClientBuilder().build(ossProperties.getEndpoint(), ossProperties.getAccessKeyId(), ossProperties.getAccessKeySecret());
        ossClient.putObject(ossProperties.getBucketName(), fileName, inputStream);

        // 文件访问路径
        String url = ossProperties.getEndpoint().split("//")[0] + "//" + ossProperties.getBucketName() + "." + ossProperties.getEndpoint().split("//")[1] + "/" + fileName;

        // 关闭ossClient
        ossClient.shutdown();

        return url;
    }
}

pom.xml

pom.xml文件中,引入以下六个依赖就可以,四个OSS的,两个Spring的

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.essay</groupId>
    <artifactId>oss-essay-spring-boot-start</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
    </properties>

    <dependencies>
        <!--阿里云OSS依赖-->
        <dependency>
            <groupId>com.aliyun.oss</groupId>
            <artifactId>aliyun-sdk-oss</artifactId>
            <version>3.15.1</version>
        </dependency>
        <dependency>
            <groupId>javax.xml.bind</groupId>
            <artifactId>jaxb-api</artifactId>
            <version>2.3.1</version>
        </dependency>
        <dependency>
            <groupId>javax.activation</groupId>
            <artifactId>activation</artifactId>
            <version>1.1.1</version>
        </dependency>
        <!-- no more than 2.3.3-->
        <dependency>
            <groupId>org.glassfish.jaxb</groupId>
            <artifactId>jaxb-runtime</artifactId>
            <version>2.3.3</version>
        </dependency>
        
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.3.22</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot</artifactId>
            <version>2.7.3</version>
            <scope>compile</scope>
        </dependency>
    </dependencies>
</project>

然后,在resources文件夹下创建一个文件夹(META-INF.spring),文件夹下创建一个文件(org.springframework.boot.autoconfigure.AutoConfiguration.imports),文件内写OSS工具类的全类名,表示在项目启动时,将该类自动注入到IOC容器中。

在这里插入图片描述

第二步:测试&打包

测试模块功能

在打包前,先创建一个Demo模块测试一下,该模块为SpringBoot项目,仅添加SpringBoot-web依赖和自定义的OSS起步依赖

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.essay</groupId>
    <artifactId>oss-demo</artifactId>
    <version>1.0-SNAPSHOT</version>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.12</version>
    </parent>

    <dependencies>
        <!--web起步依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!--自定义起步依赖-->
        <dependency>
            <groupId>com.essay</groupId>
            <artifactId>oss-essay-spring-boot-start</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>
</project>

UploadController类

import aliyun.oss.OssUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;

@RestController

public class UploadController {

    /**
     * 因为我们引入了自定义的OSS起步依赖,所以可以直接注入OSS的Bean对象
     */
    @Autowired
    private OssUtils ossUtils;

    @PostMapping("/upload")
    public String upload(MultipartFile file) throws IOException {
        // 先将文件转为字节数组
        byte[] bytes = file.getBytes();

        // 获取文件名
        String filename = file.getOriginalFilename();

        String upload = ossUtils.upload(bytes, filename);

        return upload;
    }
}

application.xml(注意配置结构要与起步依赖中的设置的一致)

在这里插入图片描述

以桌面上的这张图片为例,启动项目,使用Postman测试

在这里插入图片描述

注意路径、请求提交方式(POST)、文件名(file,要与Controller那边接收的形参名一致),图片要以请求体(Body),表单数据(form-data)的方式发送

在这里插入图片描述

测试完成
在这里插入图片描述

打包

在idea界面右侧,选择Maven,在Maven中选择自定义的起步依赖,点install
在这里插入图片描述

在这里插入图片描述

在本地的Maven仓库中就可以找到自定义的依赖,之后就可以在其他项目中直接引入该依赖,调用Bean对象(OssUtils)使用OSS文件上传功能。
在这里插入图片描述

最后测试

把起步依赖模块删除掉,试下Demo模块还能不能跑。把起步依赖模块从idea中删除掉很重要,不然用的是起步依赖模块的依赖(依赖传递),而不是从本地仓库中引入的,等于没有测试

在这里插入图片描述

idea中,pom.xml文件有提示,说明本地仓库找到了我们自定义的依赖

在这里插入图片描述

功能正常,说明自定义OSS起步依赖,打包成功

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/699438.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

华为云CodeArts TestPlan测试设计:守护产品开发质量之魂

华为产品质量的守护神 华为云CodeArts TestPlan测试设计是华为产品质量的守护神。华为云CodeArts TestPlan提供多维度测试设计模板、“需求-场景-测试点-测试用例” 四层测试分解设计能力&#xff0c;启发测试人员发散性思维&#xff0c;对项目环境、测试对象、质量标准、测试…

【SpringBlade-权限缺陷】API鉴权逻辑缺陷漏洞

目录 一、理论部分 简介 如何通过认证 API 鉴权 配置API放行 细颗粒度鉴权配置 结尾 二、实战部分 一、理论部分 简介 Secure 基于 JWT 封装&#xff0c;每次请求的时候&#xff0c;会拦截到需要鉴权的API请求&#xff0c;并对其请求头携带的Token进行认证。若 Token…

Js时间倒计时

&#x1f607;作者介绍&#xff1a;一个有梦想、有理想、有目标的&#xff0c;且渴望能够学有所成的追梦人。 &#x1f386;学习格言&#xff1a;不读书的人,思想就会停止。——狄德罗 ⛪️个人主页&#xff1a;进入博主主页 &#x1f5fc;推荐系列&#xff1a;点击进入 &#…

vue 0-1搭建项目

vue 从0-1搭建项目 前提&#xff1a;进入到需要创建项目的文件夹中&#xff0c;打开命令行窗口 windowsr 打开命令行窗口 创建vue2.0项目&#xff1a; 自动创建 1.vue create 项目名称 仅包含3个功能&#xff1a;vue2/3,babel&#xff0c;eslint 手动创建 1.vue create 项目名…

ModaHub魔搭社区:详解向量数据库Milvus的Mishards:集群分片中间件(五)

目录 在 Kubernetes 中部署 Mishards 集群 安装前提 安装流程 卸载 Mishards 从单机升级到 Mishards 集群 注意事项 基本案例 在 Kubernetes 中部署 Mishards 集群 安装前提 Kubernetes 版本 1.10 及以上Helm 版本 2.12.0 及以上 关于 Helm 的使用请参考 Helm 使用指…

【python入门系列】第一章:Python基础语法和数据类型

文章目录 前言一、简单语法1. 注释 这是一个单行注释2. 变量 二、数据类型1.字符串2.整数3.浮点数4.布尔值5.列表 三、运算符1.算术运算符&#xff1a;用于执行基本的算术操作&#xff0c;如加、减、乘和除。2.比较运算符&#xff1a;用于比较两个值的大小或相等性。3.逻辑运算…

01.网络编程-基础概念

网络编程就是指编写互联网项目&#xff0c;项目可以通过网络传输数据进行通讯 网络编程最主要的工作就是在发送端把信息通过规定好的协议进行组装包&#xff0c;在接收端按照规定好的协议把包进行解析&#xff0c;从而提取出对应的信息&#xff0c;达到通信的目的 1.1 软件结构…

Oracle 11g安装配置完美教程 - Windows

写在前面&#xff1a;博主是一只经过实战开发历练后投身培训事业的“小山猪”&#xff0c;昵称取自动画片《狮子王》中的“彭彭”&#xff0c;总是以乐观、积极的心态对待周边的事物。本人的技术路线从Java全栈工程师一路奔向大数据开发、数据挖掘领域&#xff0c;如今终有小成…

用Java解决华为OD机试考题,目标300+真题,清单奉上,祝你上岸

华为OD机考大纲 其它语言版本华为 OD 机试题清单&#xff08;机试题库还在逐日更新&#xff09;详细大纲 其它语言版本 本目录为华为od机试JS题解目录&#xff0c;其它版本清单如下 ⭐️华为OD机考 Python https://blog.csdn.net/hihell/category_12199275.html ⭐️华为OD机考…

BOSHIDA DC电源模块低温试验检测详细分析

BOSHIDA DC电源模块低温试验检测详细分析 DC电源模块的低温试验是电源应用领域中的一项重要测试&#xff0c;它可以检测模块在低温环境下的性能表现是否与设计要求相符。这是因为在一些极端环境下&#xff0c;电源模块的性能会受到影响&#xff0c;从而影响整个系统的运行稳定…

山西电力市场日前价格预测【2023-06-30】

日前价格预测 预测明日&#xff08;2023-06-30&#xff09;山西电力市场全天平均日前电价为362.38元/MWh。其中&#xff0c;最高日前价格为477.68元/MWh&#xff0c;预计出现在21: 15。最低日前电价为247.28元/MWh&#xff0c;预计出现在13: 00。以上预测仅供学习参考&#xff…

Pytorch深度强化学习(3):详解K摇臂赌博机模型和ϵ-贪心算法

目录 1 K-摇臂赌博机2 ϵ \epsilon ϵ-贪心算法3 softmax算法4 Python实现与分析 1 K-摇臂赌博机 单步强化学习是最简单的强化学习模型&#xff0c;其以贪心策略为核心最大化单步奖赏 如图所示&#xff0c;单步强化学习的理论模型是 K K K-摇臂赌博机( K K K-armed bandit)&…

内部类之成员内部类

我们在阅读源码的过程中&#xff0c;会遇到很多内部类&#xff0c;让我们阅读难度增加。这篇文章主要介绍成员内部类的作用 1.成员内部类可以访问外部类的所有方法和成员变量&#xff08;不论是静态的还是非静态的&#xff09; package com.high.concurrency.inner;/*** auth…

如何让chatgpt给我们实现一个桌面便签?

我&#xff1a; 用Java开发一款桌面便签软件。功能需求&#xff1a;1、便签可以钉在桌面任意角落&#xff1b;2、便签内容实时保存到本地&#xff1b;3、有新增按钮&#xff0c;点击新增时清除当前面板上的内容&#xff0c;新建一条新的便签内容&#xff0c;并保存到本地&#…

通往AGI之路:揭秘英伟达A100、A800、H800、V100在高性能计算与大模型训练中的霸主地位

AGI | NLP | A100 | H100 | Nvidia | Aurora GPT| LLM | A800 | V100 | Intel | ChatGPT 日前&#xff0c;随着深度学习、高性能计算、大模型训练等技术的保驾护航&#xff0c;通用人工智能时代即将到来。各个厂商也都在紧锣密鼓的布局&#xff0c;如英伟达前段时间发布GH 200…

C3.ai:一个即将“破灭”的人工智能泡沫

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 C3.ai仅适用于能承受高风险波动的投资者 猛兽财经曾在之前分析过C3.ai&#xff08;AI&#xff09;这家公司&#xff0c;认为C3.ai可能在借助人工智能热潮炒作自己。截止撰写本文时&#xff0c;C3.ai的股价已跌到了到2…

使用ganymed-ssh2连接linux报错 Cannot negotiate, proposals do not match

ganymed-ssh2连接linux报错 背景报错信息解决方案&#xff1a;运行成功 背景 最近有个项目&#xff0c;需要在Linux下的服务器内写了一部分Python脚本&#xff0c;业务处理却是在Java内&#xff0c;那么就想能不能在Java里面&#xff0c;来远程执行Linux下的Python脚本&#x…

chatgpt赋能python:使用Python连接网络摄像头

使用Python连接网络摄像头 网络摄像头是现代生活中不可或缺的设备之一&#xff0c;其允许用户在远程位置查看实时视频流。Python语言提供了强大的工具来连接和控制网络摄像头。本文将向您展示如何使用Python连接网络摄像头以及如何将视频流数据流式传输到本地计算机。 环境设…

【AUTOSAR】BMS开发实际项目讲解(十九)----电池管理系统系统设计电池单体过放后再充电保护

电池单体过放后再充电保护 关联的系统需求 TSR-BMS-2101、TSR-BMS-2102、TSR-BMS-2103、TSR-BMS-2104、TSR-BMS-2105、TSR-BMS-2106、TSR-BMS-2107、TSR-BMS-2108、TSR-BMS-2109、TSR-BMS-2110、TSR-BMS-2111、TSR-BMS-2112、TSR-BMS-2113、TSR-BMS-2114、TSR-BMS-2115、TSR-B…

七年老Android推荐 : 日常开发中好用的工具 (一)

1. 前言 作为一名拥有七年经验的Android开发工程师&#xff0c;在日常开发中&#xff0c;总希望能提升自己的开发效率&#xff0c;对此也积累了一些工具&#xff0c;本文对此总结了一些好用的工具。 2. 视频转GIF工具 我们在写博客的时候&#xff0c;常常要录屏&#xff0c;…