应用场景:

在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项目源码到私有仓库的更多相关文章

  1. iOS天气动画、高仿QQ菜单、放京东APP、高仿微信、推送消息等源码

    iOS精选源码 TYCyclePagerView iOS上的一个无限循环轮播图组件 iOS高仿微信完整项目源码 想要更简单的推送消息,看本文就对了 ScrollView嵌套ScrolloView解决方 ...

  2. 用c#开发微信 (4) 基于Senparc.Weixin框架的接收事件推送处理 (源码下载)

    本文讲述使用Senparc.Weixin框架来快速处理各种接收事件推送.这里的消息指的是传统的微信公众平台消息交互,微信用户向公众号发送消息后,公众号回复消息给微信用户.包括以下类型: 1 subsc ...

  3. Springboot 项目源码 Activiti6 工作流 vue.js html 跨域 前后分离 websocket即时通讯

    特别注意: Springboot 工作流  前后分离 + 跨域 版本 (权限控制到菜单和按钮) 后台框架:springboot2.1.2+ activiti6.0.0+ mybaits+maven+接 ...

  4. Springboot 项目源码 vue.js html 跨域 前后分离 shiro权限

    官网:www.fhadmin.org 特别注意: Springboot 工作流  前后分离 + 跨域 版本 (权限控制到菜单和按钮) 后台框架:springboot2.1.2+ activiti6.0 ...

  5. android studio git 将项目分享到github,推送到其他平台 码云 等。

    android studio git 将项目分享到github,推送到其他平台 码云 等. 作者:韩梦飞沙 Author:han_meng_fei_sha 邮箱:313134555@qq.com E- ...

  6. springboot+mybatis+bootstrap开发员工oa后台管理系统项目源码

    java项目源码详情描述:S020<springboot+mybatis+bootstrap开发员工oa后台管理系统项目源码>jboa项目有请假以及报销单的申请和审核session共享加登 ...

  7. (二、下) springBoot 、maven 、mysql、 mybatis、 通用Mapper、lombok 简单搭建例子 《附项目源码》

    接着上篇文章中 继续前进. 一.在maven 的pom.xm中添加组件依赖, mybatis通用Mapper,及分页插件 1.mybatis通用Mapper <!-- mybatis通用Mapp ...

  8. Android 开源项目源码解析(第二期)

    Android 开源项目源码解析(第二期) 阅读目录 android-Ultra-Pull-To-Refresh 源码解析 DynamicLoadApk 源码解析 NineOldAnimations ...

  9. Spring Boot 2.0系列文章(五):Spring Boot 2.0 项目源码结构预览

    关注我 转载请务必注明原创地址为:http://www.54tianzhisheng.cn/2018/04/15/springboot2_code/ 项目结构 结构分析: Spring-boot-pr ...

随机推荐

  1. 解决luajit ffi cdata引用cdata的问题

    使用luajit ffi会遇到cdata引用cdata的情况.官方说明是必须手动保存所有cdata的引用,否则会被gc掉. ffi.cdef[[ struct A { int id; }; struc ...

  2. python中的dumps和loads区别

    一.概念理解 json是一种轻量级的数据交换格式,对象由花括号括起来的逗号分割的成员构成,成员是字符串键和上文所述的值由逗号分割的键值对组成,如:{"name":"cct ...

  3. Cassandra2.2.10安装过程

    1. 2.安装JVM 3.OS环境配置: 关闭防火墙:service iptables stop vi /etc/sysctl.conf vm.zone_reclaim_mode=0 vm.max_m ...

  4. 解题笔记——NIT 遥远的村庄

    某个小镇有 N 个村庄,村庄编号1-N,给出 M 条单向道路,不存在环,即不存在 村庄A可以到达村庄B 且 村庄B也可以到达村庄A的情况.如果村庄A与村庄B之间存在一条单向道路,则说村庄A和村庄B之间 ...

  5. Asp.Net Core 混合全球化与本地化支持

    前言 最近的新型冠状病毒流行让很多人主动在家隔离,希望疫情能快点消退.武汉加油,中国必胜! Asp.Net Core 提供了内置的网站国际化(全球化与本地化)支持,微软还内置了基于 resx 资源字符 ...

  6. python3调用哈工大ltp

    运行环境ubuntu+python3 安装pyltp sudo pip3 install pyltp 下载ltp_data_v3.4.0模型 http://ltp.ai/ 分句 from pyltp ...

  7. python学习记录(九)

    0911--https://www.cnblogs.com/fnng/archive/2013/05/08/3066054.html 魔法方法.属性 准备工作 为了确保是新型类,应该把_metacla ...

  8. HDU_2446_打表

    http://acm.hdu.edu.cn/showproblem.php?pid=2446 打表,二分查找,注意查找最后的判断. #include<cstdio> #define N 2 ...

  9. 2018icpc南京现场赛-I Magic Potion(最大流)

    题意: n个英雄,m个怪兽,第i个英雄可以打第i个集合里的怪兽,一个怪兽可以在多个集合里 有k瓶药水,每个英雄最多喝一次,可以多打一只怪兽,求最多打多少只 n,m,k<=500 思路: 最大流, ...

  10. I fullly understand why can not set "auto commit off" in sqlserver

    This is xxxxx Because MES guy mistaken , the data was wrong and made system error then. After that I ...