本文主要是介绍Spring 项目里内建 Gradle 插件-ApiHug准备-工具篇-008,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
🤗 ApiHug × {Postman|Swagger|Api...} = 快↑ 准√ 省↓
- GitHub - apihug/apihug.com: All abou the Apihug
- apihug.com: 有爱,有温度,有质量,有信任
- ApiHug - API design Copilot - IntelliJ IDEs Plugin | Marketplace
ApiHug 整个工具链基于 Gradle, 使用 ApiHug 准备工作最先需要学习的就是 gradle. 工欲善其事,必先利其器
ApiHug 核心工具栏 wire + stub 也是 利用 gradle 插件, 给大家提供丝绸般丝滑体验。
概要
pugin | 文档 | 源码 | 备注 |
---|---|---|---|
org.springframework.boot | 2.7.0 | DOCopen in new window | 源码open in new window |
io.spring.dependency-management | 1.0.11.REALEASE | DOCopen in new window | 源码open in new window |
Spring 有上面两个在公共库的插件, 一个Gradle插件的开发、发布是个比较冗长的过程,那如果我们在插件的代码编写阶段,总不能修改一点点代码,就发布一个版本,然后重新运用吧?
有人可能会说,那就不发布到maven仓库,而是发布到本地仓库呗,然而这样至多发布时节省一点点时间,仍然太麻烦。
内置
幸好有 buildSrc
! 在buildSrc
中定义的插件,可以直接在其他module中运用,可以参考spring, spring-boot 中的buildSrcopen in new window逻辑,所有在项目中使用的 org.springframework.boot*
开头插件都是以这样方式提供的。
gradlePlugin {plugins {bomPlugin {id = "org.springframework.boot.bom"implementationClass = "org.springframework.boot.build.bom.BomPlugin"}
}
独立
引用和使用任何第三方插件一样:
plugins {id "org.springframework.boot.bom"id "org.springframework.boot.conventions"id "org.springframework.boot.deployed"
}
即直接apply具体的类,而不是其发布名称,这样的话,不管做什么修改,都能马上体现,而不需要等到重新发布版本。
spring boot 大概提供了10几个代码里面内带的 plugin spring 只扩展了三个: org.springframework.build.api-diff
, org.springframework.build.compile
, org.springframework.build.optional-dependencies
分析个 org.springframework.build.optional.OptionalDependenciesPlugin
spring-boot > OptionalDependenciesPluginopen in new window
spring-framework > OptionalDependenciesPluginopen in new window
两个实现的方式基本一样的 optional
:
public class OptionalDependenciesPlugin implements Plugin<Project> {/*** Name of the {@code optional} configuration.*/public static final String OPTIONAL_CONFIGURATION_NAME = "optional";@Overridepublic void apply(Project project) {Configuration optional = project.getConfigurations().create("optional");optional.setCanBeConsumed(false);optional.setCanBeResolved(false);project.getPlugins().withType(JavaPlugin.class, (javaPlugin) -> {SourceSetContainer sourceSets = project.getExtensions().getByType(JavaPluginExtension.class).getSourceSets();sourceSets.all((sourceSet) -> {project.getConfigurations().getByName(sourceSet.getCompileClasspathConfigurationName()).extendsFrom(optional);project.getConfigurations().getByName(sourceSet.getRuntimeClasspathConfigurationName()).extendsFrom(optional);});});}}
optional
作为 compileOnly
一个替代, 在 compile
和 runtime
classpath 里面但是不会增加到 依赖里面。 但是 compileOnly
其实会导致测试的 classpath
无法满足, 所以你会看到比较笨的解决方案:
dependencies {compileOnly "org.slf4j:slf4j-api"testImplementation "org.slf4j:slf4j-api"
}
我们
这篇关于Spring 项目里内建 Gradle 插件-ApiHug准备-工具篇-008的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!