使用Gradle推送SpringBoot项目源码到私有仓库
应用场景:
在SpringCloud微服务项目中,通常会划分成多个业务服务,而这些服务之间一般会使用Feign组件进行相互调用,所以在项目开发中会衍生出一个问题:Feign客户端代码该由服务调用方的开发人员编写还是服务提供方的开发人员编写?
服务调用方编写:开发人员A需要开发人员B提供一个接口,开发人员B写好接口后,将URL、参数、方法名等告诉开发人员A或者直接点,直接写好代码发给对方,开发人员A再拿A给的代码写进项目里 => 开发流程不够规范、后期不便维护,如果开发人员B修改了接口的URL或其他东西,那么还得通知A进行修改,效率低
服务提供方编写:开发人员A需要开发人员B提供一个接口,开发人员B将Feign客户端模块独立出来,写好Feign客户端和REST接口,再在子类中实现该接口,编写好具体业务逻辑,开发完成后,将独立出来的Feign客户端模块打包上传到私有Maven仓库,让开发人员A的项目添加B提供的Feign客户端依赖,直接即可在项目中进行接口调用,效率高,后期方便维护,开发人员B的服务接口发生了更改,让开发人员A更新依赖即可
下面说明下(踩坑过程)使用Gradle将SpringBoot项目的源码打包并上传到私有Maven仓库的方法
使用IDEA搭建SpringBoot项目(使用Gradle)时,项目根目录下的初始build.gradle文件内容大概如下
plugins {
id 'org.springframework.boot' version '2.2.2.RELEASE'
id 'io.spring.dependency-management' version '1.0.8.RELEASE'
id 'java'
}
group = 'com.learn'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'
repositories {
mavenCentral()
}
ext {
set('springCloudVersion', "Hoxton.SR1")
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.cloud:spring-cloud-starter-openfeign'
testImplementation('org.springframework.boot:spring-boot-starter-test') {
exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
}
}
dependencyManagement {
imports {
mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
}
}
test {
useJUnitPlatform()
}
添加Gradle的maven-publish插件,该插件提供打包源码并发布代码到Maven仓库的功能
plugins {
//id 'org.springframework.boot' version '2.2.2.RELEASE'
id 'io.spring.dependency-management' version '1.0.8.RELEASE'
......
id 'maven-publish'
}
划重点1: org.springframework.boot 这个插件一定要删掉或者注释掉,这个插件是用来将打包SpringBoot项目的,如果不禁用掉这个插件,打包时将会打包成SpringBoot应用的可启动jar包,会将各种依赖都打包进去,而不会打包成我们想要的源码jar包
划重点2:使用IDEA构建SpringBoot应用时,会在dependencyManagemet中统一管理依赖版本而不用我们显示指定,但是如果要使用Gradle的maven-publish插件的话,需要在依赖定义中指定具体版本,否则会打包失败
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web:2.2.2.RELEASE'
implementation 'org.springframework.cloud:spring-cloud-starter-openfeign:2.2.1.RELEASE'
testImplementation('org.springframework.boot:spring-boot-starter-test:2.2.2.RELEASE') {
exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
}
}
再在build.gradle文件中加上
//声明一个打包源码的Task
task sourcesJar(type: Jar, dependsOn: classes) {
from sourceSets.main.allJava
archiveClassifier = 'sources'
}
//声明代码发布
publishing {
publications {
vectorMaven(MavenPublication) {
artifactId = 'feign-api'
from components.java artifact sourcesJar
}
}
repositories {
maven {
url 'http://xxxxx/repository/xxx-maven/' //私有仓库地址
credentials {
username = 'admin' //私有仓库账号
password = 'xxx' //私有仓库密码
} }
}
}
私有Maven仓库是使用Nexus搭建的私有仓库,使用Docker拉取官方镜像即可很方便的部署,具体操作自行百度
最后在项目根目录中使用gradlew publish命令(Windows系统)
或IDEA的Gradle项目构建可视化窗口 => Tasks => publishing => publish
即可自动完成源码打包并推送到私有Maven仓库
使用Gradle推送SpringBoot项目源码到私有仓库的更多相关文章
- iOS天气动画、高仿QQ菜单、放京东APP、高仿微信、推送消息等源码
iOS精选源码 TYCyclePagerView iOS上的一个无限循环轮播图组件 iOS高仿微信完整项目源码 想要更简单的推送消息,看本文就对了 ScrollView嵌套ScrolloView解决方 ...
- 用c#开发微信 (4) 基于Senparc.Weixin框架的接收事件推送处理 (源码下载)
本文讲述使用Senparc.Weixin框架来快速处理各种接收事件推送.这里的消息指的是传统的微信公众平台消息交互,微信用户向公众号发送消息后,公众号回复消息给微信用户.包括以下类型: 1 subsc ...
- Springboot 项目源码 Activiti6 工作流 vue.js html 跨域 前后分离 websocket即时通讯
特别注意: Springboot 工作流 前后分离 + 跨域 版本 (权限控制到菜单和按钮) 后台框架:springboot2.1.2+ activiti6.0.0+ mybaits+maven+接 ...
- Springboot 项目源码 vue.js html 跨域 前后分离 shiro权限
官网:www.fhadmin.org 特别注意: Springboot 工作流 前后分离 + 跨域 版本 (权限控制到菜单和按钮) 后台框架:springboot2.1.2+ activiti6.0 ...
- android studio git 将项目分享到github,推送到其他平台 码云 等。
android studio git 将项目分享到github,推送到其他平台 码云 等. 作者:韩梦飞沙 Author:han_meng_fei_sha 邮箱:313134555@qq.com E- ...
- springboot+mybatis+bootstrap开发员工oa后台管理系统项目源码
java项目源码详情描述:S020<springboot+mybatis+bootstrap开发员工oa后台管理系统项目源码>jboa项目有请假以及报销单的申请和审核session共享加登 ...
- (二、下) springBoot 、maven 、mysql、 mybatis、 通用Mapper、lombok 简单搭建例子 《附项目源码》
接着上篇文章中 继续前进. 一.在maven 的pom.xm中添加组件依赖, mybatis通用Mapper,及分页插件 1.mybatis通用Mapper <!-- mybatis通用Mapp ...
- Android 开源项目源码解析(第二期)
Android 开源项目源码解析(第二期) 阅读目录 android-Ultra-Pull-To-Refresh 源码解析 DynamicLoadApk 源码解析 NineOldAnimations ...
- Spring Boot 2.0系列文章(五):Spring Boot 2.0 项目源码结构预览
关注我 转载请务必注明原创地址为:http://www.54tianzhisheng.cn/2018/04/15/springboot2_code/ 项目结构 结构分析: Spring-boot-pr ...
随机推荐
- 史上最简单的的HashTable源码分析
HashTable源码分析 1.前言 Hashtable 一个元老级的集合类,早在 JDK 1.0 就诞生了 1.1.摘要 在集合系列的第一章,咱们了解到,Map 的实现类有 HashMap.Link ...
- oracle问题之死锁 (一)
[前言] 遇到 oracle 异常 和 解决实践 系列文章 整理分享 杂症一.oracle死锁 一.症状: 执行SQL或程序时,程序没有响应或SQL执行一直处于执行状态,没有成功,也没有报错. 二.病 ...
- 使用RKE快速部署k8s集群
一.环境准备 1.1环境信息 IP地址 角色 部署软件 10.10.100.5 K8s Master Etcd.Control 10.10.100.17 K8s Worker1 Worker 10.1 ...
- 项目SpringMVC+Spring+Mybatis 整合环境搭建(2)-> 测试Spring+Mybatis 环境
测试前期准备 第一步:创建easybuy数据库,设置utf-8格式 第二步:创建表test_tb CREATE TABLE `test_tb` ( `id` int(11) NOT NULL AUTO ...
- 一文教你一次性完成Helm 3迁移
2019年,Kubernetes软件包管理器--Helm发布了最新版本Helm 3,并且该版本已经stable.Helm 3中的一些关键特性我们在之前的文章中已经介绍过,其中一些功能吸引了许多开发人员 ...
- tf识别非固定长度图片ocr(数字+字母 n位长度可变)- CNN+RNN+CTC
先安装必须的库 tensorflow_gpu==1.15.0 numpy opencv_python github: https://github.com/bai-shang/crnn_ctc_ocr ...
- WTL改变对话框大小
1.让对话框从CdialogResize类继承过来: class CMainDlg : public CDialogImpl<CMainDlg>, public CDoubleBuffer ...
- FFMPEG学习----遍历所支持的解码器
下面简单介绍一下遍历ffmpeg中的解码器信息的方法(这些解码器以一个链表的形式存储): 1.注册所有编解码器:av_register_all(); 2.声明一个AVCodec类型的指针,比如说AVC ...
- 一分钟简单了解 JSON Web Token
JSON Web Token(JWT)是一个开放的标准(RFC 7519),它定义了一个紧凑且自包含的方式,用于在各方之间作为 JSON 对象安全地传输信息.由于此信息是经过数字签名的,因此可以被验证 ...
- Codeforces_733_D
http://codeforces.com/problemset/problem/733/D 先给边排序,然后按3条边排序,只要判断相邻是否能组成长方体. #include<iostream&g ...