Gradle 在 Spring 中的使用-ApiHug准备-工具篇-006

  🤗 ApiHug × {Postman|Swagger|Api...} = 快↑ 准√ 省↓

  1. GitHub - apihug/apihug.com: All abou the Apihug   
  2. apihug.com: 有爱,有温度,有质量,有信任
  3. ApiHug - API design Copilot - IntelliJ IDEs Plugin | Marketplace

ApiHug 整个工具链基于 Gradle, 使用 ApiHug 准备工作最先需要学习的就是 gradle. 工欲善其事,必先利其器

参考: BOM 版本open in new window + 版本字段open in new window 。

pugin文档源码备注
org.springframework.boot2.7.0DOCopen in new window源码open in new window
io.spring.dependency-management1.0.11.REALEASEDOCopen in new window源码open in new window

#init


gradle init

org.springframework.bootopen in new window 主要是各种Job gradle tasks 里面 boot 开头的job 都是:

  1. 打包成可执行jar、war
  2. 引入以来管理 spring-boot-dependencies 也就是: BOM_COORDINATES

public static final String BOM_COORDINATES = "org.springframework.boot:spring-boot-dependencies:"
   + SPRING_BOOT_VERSION;

gradle tasks

Application tasks
-----------------
bootRun - Runs this project as a Spring Boot application.

Build tasks
-----------
bootBuildImage - Builds an OCI image of the application using the output of the bootJar task
bootJar - Assembles an executable jar archive containing the main classes and their dependencies.
bootJarMainClassName - Resolves the name of the application's main class for the bootJar task.
bootRunMainClassName - Resolves the name of the application's main class for the bootRun task.

io.spring.dependency-managementopen in new window, 主要是依赖控制: A Gradle plugin that provides Maven-like dependency management and exclusions, 提供和maven 里面 pom 类似操作。

这两个插件一般是组合使用, dependency-management 依赖 boot 的 pom 版本。


plugins {
  id 'org.springframework.boot' version '2.7.0'
  id 'io.spring.dependency-management' version '1.0.11.RELEASE'
  id 'java'
}

BOM 版本open in new window + 版本字段open in new window 。 两个plugin 有什么关系?

当 io.spring.dependency-management 插件被加入的时候, Spring Boot 插件将自动导入 spring-boot-dependencies bom,也就是避免导入starter 时候设置版本号(pom 的本质和好处)。

相当于自动导入了:

dependencyManagement {
  imports {
    mavenBom "org.springframework.boot:spring-boot-dependencies:${SPRING_BOOT_VERSION}"
  }
}
    

spring.boot 插件是避免带入版本号, 如果你只想使用 spring.boot 的版本依赖, 但是不想引用 spring.boot 的定制的一些task 比如 boot jar(比如定制spring starter); 有两种方式。

#第0种

plugins {
  id 'org.springframework.boot' version '2.7.0'
  id 'io.spring.dependency-management' version '1.0.11.RELEASE'
  id 'java'
}


ext {
  set('springCloudVersion', "2021.0.3")
  set('testcontainersVersion', "1.17.2")
}

dependencies {
  implementation 'org.springframework.boot:spring-boot-starter-web'
  implementation 'org.springframework.cloud:spring-cloud-starter-config'
  testImplementation 'org.springframework.boot:spring-boot-starter-test'
  testImplementation 'org.testcontainers:junit-jupiter'
}

dependencyManagement {
  imports {
    //不需要显式的导入 boot-dependencies 
    mavenBom "org.testcontainers:testcontainers-bom:${testcontainersVersion}"
    mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
  }
}

#第一种

plugins {
	id 'java'
	id("org.springframework.boot") version "2.7.0" apply false
	id("io.spring.dependency-management") version "1.0.11.RELEASE"
}

dependencyManagement {
	imports {
		mavenBom(org.springframework.boot.gradle.plugin.SpringBootPlugin.BOM_COORDINATES)
	}
}

apply false 表示不带task过来, 那么下面 SpringBootPlugin.BOM_COORDINATES 同样带来 导入 boot bom 效果:


public static final String BOM_COORDINATES = "org.springframework.boot:spring-boot-dependencies:"
			+ SPRING_BOOT_VERSION;

默认引入了tasks:

gradle tasks

Application tasks
-----------------
bootRun - Runs this project as a Spring Boot application.

Build tasks
-----------
bootBuildImage - Builds an OCI image of the application using the output of the bootJar task
bootJar - Assembles an executable jar archive containing the main classes and their dependencies.
bootJarMainClassName - Resolves the name of the application's main class for the bootJar task.
bootRunMainClassName - Resolves the name of the application's main class for the bootRun task.

一旦 apply false, bootRun 开头的所有任务就没有了!

#第二种

用 gradle 原生的 platform 功能

plugins {
	id 'java'
	id("org.springframework.boot") version "2.7.0" apply false
}

dependencies {
	implementation platform(org.springframework.boot.gradle.plugin.SpringBootPlugin.BOM_COORDINATES)
}

#两种方式差别

用 spring 的 dependency 或者 gradle platform 有什么差别?

#Spring Depedencies Management Plugin

Spring depedency management 提供了编辑通道:


ext['slf4j.version'] = '1.7.20'

#Gradle Platform

纯 gradle 方式:


configurations.all {
	resolutionStrategy.eachDependency { DependencyResolveDetails details ->
		if (details.requested.group == 'org.slf4j') {
			details.useVersion '1.7.20'
		}
	}
}

org.springframework.boot 和 boot 一致, io.spring.dependency-management 一般配合使用, dependency-management 会使用 boot 的版本。

#参考项目

  1. 统一版本管理 Sharing dependency versions between projectsopen in new window
  2. The Java Platform Pluginopen in new window
  3. spring boot pluginopen in new window
  4. spring depedency managementopen in new window
  5. spring framework testopen in new window
  6. java gradle template

api-hug-contact

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AI预测小分子与蛋白的相关特征: MegaMolBART, MoFlow,ESM-1, ESM-2

1、小分子:MegaMolBART, MoFlow 1)MegaMolBART https://github.com/NVIDIA/MegaMolBART 基于 SMILES 的小分子药物发现与化学信息学深度学习模型。 2)MoFlow https://github.com/calvin-zcx/moflow 用flow流方式分子生成 2、蛋白质:ESM-1, ESM-2 https://github.com/fa…

21.5k Star , AI 智能体项目OpenDevin:少写代码,多创造(附部署教程)

Aitrainee | 公众号:AI进修生 这是一个旨在复制 Devin 的开源项目,Devin 是一位自主人工智能软件工程师,能够执行复杂的工程任务并在软件开发项目上与用户积极协作。该项目致力于通过开源社区的力量复制、增强和创新 Devin。 Devin 代表了一…

Solana 上创建自己的 SLPToken:简明指南

Solana 定义 Solana 是由 Solana Labs 创建的区块链平台,旨在提供高吞吐量和低延迟的去中心化应用(DApps)开发环境。它采用一系列创新技术,如 PoH(Proof of History)共识机制和 Tower BFT(BFT …

java:课后笔记wk45

文章目录 1. class1.1 toString()和equals()1.2 overload-constructor1.3 static 2. Wrapper3. Maths4. array5. arrayList 1. class 1.1 toString()和equals() public class People{private int age;private String name;public People(int age, String name){this.age age…

每日一题:无重复字符的最长子串

给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串的长度。 示例 1: 输入: s "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是"abc",所以其长度为 3。示例 2: 输入: s "bbbbb" 输出: 1 解释: 因为无重…

mysql题目5

tj11: select max(c.teacher_age) 最大的年龄 from tb_teacher c tj12: select a.class_name 班级名称,b.student_name 学生姓名,b.gender 学生性别 from tb_class a join tb_student b on a.class_idb.class_id join tb_teacher c on a.teacher_idc.teacher_id w…

【深度学习实战(1)】如何使用argparse模块设置自己的训练参数

一、argparse模块用法 1、argparse是一个python模块,用途是:命令行选项、参数和子命令的解释。 2、argparse库下载:pip install argparse 3、使用步骤: 导入argparse模块,并创建解释器 添加所需参数 解析参数 二、…

2024年【化工自动化控制仪表】考试内容及化工自动化控制仪表考试总结

题库来源:安全生产模拟考试一点通公众号小程序 化工自动化控制仪表考试内容是安全生产模拟考试一点通生成的,化工自动化控制仪表证模拟考试题库是根据化工自动化控制仪表最新版教材汇编出化工自动化控制仪表仿真模拟考试。2024年【化工自动化控制仪表】…

2009-2021年上市公司僵尸企业识别数据(含原始数据+计算代码+计算结果)

2009-2021年上市公司僵尸企业识别数据(含原始数据计算代码计算结果) 1、时间:2009-2021年 2、指标: 证券代码 、证券简称、上市日期、year、净利润、政府补助、流动负债合计、负债合计、财务费用明细利息支出、资产总计、长期负…

springboot 人大金仓 kingbase-备份还原,命令中带密码

命令带密码参考 Java代码实现国产人大金仓数据库备份还原需求-CSDN博客文章浏览阅读818次,点赞16次,收藏12次。本人在一次项目中,遇到了需要在系统管理中提供给用户备份还原系统数据的功能,由于项目特殊性,项目底层数…

【漏洞复现】WordPress LayerSlider插件SQL注入漏洞复现

声明:亲爱的读者,我们诚挚地提醒您,Aniya网络安全的技术文章仅供个人研究学习参考。任何因传播或利用本实验室提供的信息而造成的直接或间接后果及损失,均由使用者自行承担责任。Aniya网络安全及作者对此概不负责。如有侵权&#…

PostgreSQL入门到实战-第二十七弹

PostgreSQL入门到实战 PostgreSQL中数据分组操作(二)官网地址PostgreSQL概述PostgreSQL中HAVING命令理论PostgreSQL中HAVING命令实战更新计划 PostgreSQL中数据分组操作(二) 使用PostgreSQL HAVING子句来指定组或聚合的搜索条件 官网地址 声明: 由于操作系统, 版本更新等原因…

驾校驾考全科语音矩阵版h5微信抖音QQ快手小程序app开源版开发

驾校驾考全科语音矩阵版h5微信抖音QQ快手小程序app开源版开发 支持SAAS、支持独立加密、支持独立开源、价格不同。 自带数据,后台一键初始。 驾考系统 微信公众号微信小程序抖音小程序可打包APP 所有车型全覆盖、2024全科题目、语音讲解、模拟考试等等 这是一款什…

NL2SQL实践系列(1):深入解析Prompt工程在text2sql中的应用技巧

NL2SQL实践系列(1):深入解析Prompt工程在text2sql中的应用技巧 NL2SQL基础系列(1):业界顶尖排行榜、权威测评数据集及LLM大模型(Spider vs BIRD)全面对比优劣分析[Text2SQL、Text2DSL] NL2SQL基础系列(2):主流大模型…

OSPF动态路由实验(思科)

华为设备参考: 一,技术简介 OSPF(Open Shortest Path First)是一种内部网关协议,主要用于在单一自治系统内决策路由。它是一种基于链路状态的路由协议,通过链路状态路由算法来实现动态路由选择。 OSPF的…

蓝桥杯真题演练:2023B组c/c++

日期统计 小蓝现在有一个长度为 100 的数组,数组中的每个元素的值都在 0 到 9 的范围之内。 数组中的元素从左至右如下所示: 5 6 8 6 9 1 6 1 2 4 9 1 9 8 2 3 6 4 7 7 5 9 5 0 3 8 7 5 8 1 5 8 6 1 8 3 0 3 7 9 2 7 0 5 8 8 5 7 0 9 9 1 9 4 4 6 8 6 3 …

LeetCode 热题 HOT 100(P31~P40)

系列文章: LeetCode 热题 HOT 100(P1~P10)-CSDN博客 LeetCode 热题 HOT 100(P11~P20)-CSDN博客 LeetCode 热题 HOT 100(P21~P30)-CSDN博客 LeetCode 热题 HOT 100(P31~P40)-CSDN博客 LC76minimum_window . - 力扣(LeetCode) 题目&…

设计一个通知系统

设计的系统支持不同类型消息的发送,例如push消息,sms消息和邮箱消息,能够支持千万级别的发送,保证消息推送的幂等性。系统结构图如下: 系统架构图中各组件作用说明: device/setting/user info:…

反向迭代器的底层

文章目录 1.迭代器分类2.迭代器使用3.模拟实现迭代器3.1 各个类的迭代器3.2 所有容器的迭代器(迭代器适配器) 1.迭代器分类 迭代器按照定义方式分成以下四种。 正向迭代器,定义方法如下: 容器类名::iterator 迭代器名; 常量正向迭代器,定…

Swagger转换成Excel文件

1、添加swagger解析依赖包&#xff1a; <dependency><groupId>io.swagger.parser.v3</groupId><artifactId>swagger-parser</artifactId><version>2.1.12</version></dependency>2、示例代码&#xff1a; package com.rlclou…