应用场景:

在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. selenium获取页面源码,判断是否存在指定内容,执行不同的操作

    本案例用于解决selenium UI自动化,判断页面是否存在指定文字,执行后续不同的操作 主要用到browser.page_source 如,保存百度分享文件到自己的百度盘中,会出现文件被删除无法保存 ...

  2. JS-02-js的变量

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  3. django1.11版本在python3.7中运行还有点兼容性问题.

    django1.11版本在python3.7中运行还有点兼容性问题. 出现SyntaxError: Generator expression must be parenthesized这个报错 找到这 ...

  4. mybatis缓存,从一个“灵异”事件说起

    刚准备下班走人,被一开发同事叫住,让帮看一个比较奇怪的问题:Mybatis同一个Mapper接口的查询方法,第一次返回与第二次返回结果不一样,百思不得其解! 问题 Talk is cheap. Sho ...

  5. webdriver的常用方法

    webdriver的常用方法 click():点击元素 clear():清除文本 send_keys(value):模拟按键输入 # -*- coding:utf-8 -*- from seleniu ...

  6. POJ_3627_贪心

    题目描述: 给你N个数和一个总和,要求求出最少个数的数相加大于等于这个总和. 思路: 很简单的贪心,先排序,从大到小加一次,比较一次,直到符合条件. 我用了优先队列,运行时间好像多了一倍= = #in ...

  7. POJ_1564_dfs

    题目描述: 每组数据给定一个大的数,和一系列降序的数值,要求列出不重复的数值中挑选的数的和为大数的方案,每一种方案里,每个数值最多只能使用一次. 思路: dfs基础题,每次记录大数和当前总和的差值,当 ...

  8. (三)(2)wait/notify实现生产者-消费者模型,join方法

    生产者,消费者模型 举个例子来说明,厨师,服务员,厨师做菜,服务员上菜,如果厨师没有做好菜,那么服务员就无法上菜,厨师做好了菜,然后通知服务员消费(上菜).在这个过程之中,厨师扮演的就是生产者,服务员 ...

  9. learn about sqlserver partitition and partition table --- add or remove table partitions addition more

    Yes . In the previous. chapter , we see how to generate "partition function" "parttit ...

  10. EMC NW NMM to restore MS AG database

    Following last article, how to restore MS AG database , that is in the following: You see ?  Cheer u ...