前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >架构设计-从零开始搭建gradle多模块项目

架构设计-从零开始搭建gradle多模块项目

作者头像
微笑的小小刀
发布2019-08-06 14:39:29
1.7K0
发布2019-08-06 14:39:29
举报
文章被收录于专栏:java技术大本营

技术选型

spring-boot: java做web开发,这个差不多是基础了 mybatis: 做javaweb开发,连数据库大都是用的这个 redis: 做javaweb开发,缓存大都是用的这个 用的都是常用的东西,没什么新特色,大家对技术选型这块,可以不考虑这么多,随大流就行了,想高级一点,就深入把每一部分的原理弄清楚.

gradle 简介

为什么选gradle没有用maven呢 ,gradle做为新一代的构建工具,说实话,构建速度,我还真没对比过,但就方便省事而言,gradle还是挺省事的,写的代码变少了,也清晰了不少,而且迭代升级超快,去年第一次接触gradle的时候还是4.x的版本,现在都5.x了

gradle 配置多模块项目

想要学习gradle多模块最好的方式,就是看看spring源码, spring 源码就是用的gradle进行构建,小刀fork了官网的spring项目,并且新加子一个中文注释的分支 https://github.com/weixiaodexiaoxiaodao/spring-framework 分支是:5_1_x_study 所以需要复杂构建的小伙伴可以看看spring中是怎么写的,但是现在简单的构建 可以直按小刀下面的写法, 我们一起来创建一个基本的项目,以后的项目都上课就那样以这个为蓝本进行构建

生成初始项目

初始项目的生成,我们还是选用spring官方的生成方式: https://start.spring.io/ 在这个页面,我们可以选择一些通用的配置, 如, maven , gradle ,jdk版本,依赖等等,这里小刀填一个最小化的版本:

然后选生成工程,打开后,可得到一个开箱即用的工程

但是这个工程是单模块的,我们要把他改造成多模块的

改造成多模块项目

改造并不麻烦, 像以前在maven工程中, 需要在主pom里面声明Module一样, gradle需要在settings.gradle里面添加名处模块的名称:

代码语言:javascript
复制
rootProject.name = 'market'
include 'market-admin'
include 'market-client'
include 'market-service'
include 'market-common'
include 'market-business'
include 'market-business-impl'

然后在对应着新建文件夹,然后把我们初始化生成项目中的文件,复制到market-admin 这个文件夹中.现在的项目结构如下图所示:

配置全局配置项

以前在用maven时, 我们需要一个额外的setting.xml来配置maven使用的镜像之类的,在gradle中,就不需要额外的文件了,只需要在build.gradle里面配置即可.所以现在我们在主build.gradle中进行配置整个项目的maven仓库的地址

配置maven仓库的地址

代码语言:javascript
复制
allprojects {
  repositories {
    maven { url getMavenPublicUrl()
      credentials {
        username 'xxxx'
        password 'xxxx'
      }
    }
    maven { url getMavenSnapshotUrl()
      credentials {
        username 'xxxx'
        password 'xxxx'
      }
    }

  }
}

def getMavenPublicUrl(){
  def  url = "http://xxxxx.xxxxx:port/repository/maven-public/";
  if(project.hasProperty('BUILD_TYPE')){
    if(BUILD_TYPE == "test"){
      println "现在是测试环境"
      url = "http://xxxxx.xxxxx:8081/repository/maven-public/"
    }
  }
  return url
}

def getMavenSnapshotUrl(){
  def  url = "http://xxxxx.xxxxxxx:port/repository/maven-snapshots/";
  if(project.hasProperty('BUILD_TYPE')){
    if(BUILD_TYPE == "test"){
      println "现在是测试环境"
      url = "http://xxxxxx:8081/repository/maven-snapshots/"
    }
  }
  return url
}

这里面我们可以通过脚本来判断当前执行构建的是什么环境,不同的环境有不同的maven地址, 启动构建时需要传参:

代码语言:javascript
复制
gradle bootjar -PBUILD_TYPE=test --refresh-dependencies -info -b ${app_name}/build.gradle

配置gradle插件的地址

在settings里面顶头开始写,小刀这里是用的阿里云公开的gradle插件地址,如果是用自己nexus服务的话,需要先在nexus上新建一个代理repo,然后代理gradle 插件地址, settings.build中再对应的地址改为nexus中新建的repo的地址

代码语言:javascript
复制
pluginManagement {
  repositories {
    maven { url "https://maven.aliyun.com/repository/gradle-plugin"
    }
  }
}

模块及功能划分

如上面目录结构图所示,一般来说,这几层都是避不可免的,对外提供web访问的admin模块,打包出去的client模块, 对外提供dubbo接口的service模块,供admin,service调用的business接口模块,business的实现逻辑的business-impl模块,自己项目定制化的工具类,通用的配置等等.

这里一直有个小纠结,就是现在很多项目其实写了接口,也只是一个实现类,并没有说很多实现类怎么样, business和business-impl 实际上是一对一的关系,这里面会有不少小伙伴选择新建项目时,去除掉 business和 bubsiness-impl , 用一层manager来顶替接口和实现类,admin调用manager , manager调用dao. 具体怎么选择,可根据公司业务来选择.

注意依赖和配置的位置

  1. 虽说现在这样项目已经可以跑起来了,但实际上,还是有不少坑,如主build.gradle里面不要引依赖,但是可以写版本号.
  2. 只能在admin,service的build.gradle里面写springboot的插件
  3. 配置文件,只能放在admin和service的resources目录下
  4. 类如mybatis的连接, redis的连接配置, apollo,mq 等配置,都只能放在admin/service的相关位置

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-08-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 java技术大本营 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 技术选型
  • gradle 简介
  • gradle 配置多模块项目
    • 生成初始项目
      • 改造成多模块项目
        • 配置全局配置项
          • 配置maven仓库的地址
          • 配置gradle插件的地址
          • 模块及功能划分
        • 注意依赖和配置的位置
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档