gradle 指定springcloud 版本_使用Gradle构建SpringBoot项目

65b63ab2b2d3273fcb3bf4619f1aa9d5.gif

        本项目使用Gradle构建SpringBoot项目,将不同的业务进行不同的模块划分;

- 编辑器:Intellij IDEA- 构建工具:Gradle6.5- SpringBoot版本:2.3.2.RELEASE- 版本管理:GitHub- 个人GitHub地址: - 项目Clone地址:https://github.com/liuc8023/zhifou.git

项目结构如下

2d951b14fcf2412412b848e45fa08028.png

项目构建

        首先创建一个项目,我们使用IDEA构建一个Gradle Java项目,作为项目的最外层,只做为整个项目的容器,所以最外层项目只构建为普通的Gradle项目即可; 

File | New | Project

9110bc0fe12ff263e820510175f41627.png

填写GroupId与ArtifactId; 
一般正式项目的GroupId为com.*开头,也可因个人习惯自定义,具体规则大家可以参考命名规范,ArtifactId为项目名称; 

87407a1881ae0ff7bc0a7e232e9d7de1.png

给项目设置自己本地的Gradle地址

File | Settings | Build, Execution, Deployment | Build Tools | Gradle

df90f780a2c66e98db56729c2a192add.png

        项目已经创建好了,我们开始创建各个模块,在不同项目中,模块划分的方式也会不同,具体的模块划分可以按照实际项目的需求进行划分;

        下面就可以按照自己的需求创建模块: 
右键项目,点击 New -> Moduel,选择Gradle,如下图:

4984683bfd5e8fffa9e3e0d10b74d09d.png

给新模块设置属性

287a79470520145e339bf8ed6d3e041a.png

父层项目settings.gradle设置如下:

父层项目build.gradle设置如下:

 下面的配置供参考,有自己需要的配置,自行百度,然后配进去

group 'com.springcloud.zhifou'version '1.0-SNAPSHOT'// buildscript 代码块中脚本优先执行buildscript {    // ext 用于定义动态属性    ext {        springBootVersion = '2.3.2.RELEASE'    }    //仓库管理    repositories {        // 本地maven仓库        mavenLocal()        //自定义maven仓库地址        maven {            url = 'http://maven.aliyun.com/nexus/content/groups/public/'        }        mavenCentral()        google()        //和maven中央仓库一样的另一个依赖管理仓库,主要是java        jcenter()        maven { url "https://repo.spring.io/snapshot" }        maven { url "https://repo.spring.io/milestone" }        maven { url 'http://oss.jfrog.org/artifactory/oss-snapshot-local/' }    }    /**     * api 用于取代compile(已被废弃)     * api或compile关键字引用的包对于其他module来说是可见的,     * implementation关键字引用的包对于其他module来说是不可见的。     */    //项目依赖    dependencies {        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")    }}//allprojects所有项目共享的配置allprojects {    apply plugin: 'java'    apply plugin: 'idea'    apply plugin: 'maven'    apply plugin: 'java-library'    sourceCompatibility = 1.8    targetCompatibility = 1.8}// subprojects : 所有子模块共享的配置subprojects {    apply plugin: 'java'    apply plugin: 'idea'    // java编译的时候缺省状态下会因为中文字符而失败    [compileJava, compileTestJava, javadoc]*.options*.encoding = 'UTF-8'    // 配置所有子模块的依赖仓库地址    repositories {        // 本地maven仓库        mavenLocal()        mavenCentral()        maven { url = 'http://maven.aliyun.com/nexus/content/groups/public/' }        //和maven中央仓库一样的另一个依赖管理仓库,主要是java        jcenter()    }    ext {//依赖版本        lombokVersion= '1.18.12'        fastjsonVersion = "1.2.54"        disruptorVersion = '3.4.2'        log4jVersion = '2.13.3'        commonslang3Version = '3.11'        commonsCodecVersion = '1.14'        javaxAnnotationApiVersion = '1.3.2'        jansiVersion = '1.18'        huToolVersion = '5.3.10'        servletApiVersion = '4.0.1'        mapStructVersion = '1.3.1.Final'    }    //所有子模块共有依赖    dependencies{        //这里如果配置了jar包依赖,所有子项目共享,使用了gradle的依赖传递特性。        compile(                //引入disruptor并发框架                "com.lmax:disruptor:$disruptorVersion",                //log4j                "org.apache.logging.log4j:log4j-core:$log4jVersion",                "org.apache.logging.log4j:log4j-api:$log4jVersion",                "log4j:log4j:1.2.17",                //通用基础库                "org.apache.commons:commons-lang3:$commonslang3Version",                "commons-codec:commons-codec:$commonsCodecVersion",                "jaxen:jaxen:1.2.0",                "javax.annotation:javax.annotation-api:$javaxAnnotationApiVersion",                "javax.servlet:javax.servlet-api:$servletApiVersion",                //lombok                "org.projectlombok:lombok:$lombokVersion",                //控制台彩色字体库                "org.fusesource.jansi:jansi:$jansiVersion",                "cn.hutool:hutool-all:$huToolVersion",                //FastJson                "com.alibaba:fastjson:$fastjsonVersion",                //mapstruct                "org.mapstruct:mapstruct-jdk8:$mapStructVersion",                "org.mapstruct:mapstruct-processor:$mapStructVersion"        )        // 测试依赖        testCompile(                "org.springframework.boot:spring-boot-starter-test:$springBootVersion",                "junit:junit:4.12"        )    }    //所有需要忽略的包定义在此    configurations {        //移除spring boot 默认logger依赖        all*.exclude module: 'spring-boot-starter-logging'    }    //我们为 Java 项目指定了版本号以及所用的 JDK 版本,并且添加一些属性到 mainfest 中。    jar {        manifest {            attributes("Implementation-Title": "Gradle")        }    }    gradle.projectsEvaluated {        tasks.withType(JavaCompile) {            options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation"        }    }    //Gradle 和 idea 集成时如何不自动下载依赖源码和javadoc    idea {        module {            downloadJavadoc = false            downloadSources = false        }    }    //如果是Gradle 4.6及以上版本,则Gradle原生支持Junit5    test {        useJUnitPlatform()        testLogging {            showStandardStreams = true            exceptionFormat = "full"        }    }}

子工程build.gradle设置如下:

// buildscript 代码块中脚本优先执行buildscript {    // ext 用于定义动态属性    ext {        springBootVersion = '2.3.2.RELEASE'        springloadedVersion = '1.2.8.RELEASE'    }    //仓库管理    repositories {        // 本地maven仓库        mavenLocal()        //自定义maven仓库地址        maven {            url = 'http://maven.aliyun.com/nexus/content/groups/public/'        }        mavenCentral()        google()        //和maven中央仓库一样的另一个依赖管理仓库,主要是java        jcenter()        maven { url "https://repo.spring.io/snapshot" }        maven { url "https://repo.spring.io/milestone" }        maven { url 'http://oss.jfrog.org/artifactory/oss-snapshot-local/' }    }    /**     * api 用于取代compile(已被废弃)     * api或compile关键字引用的包对于其他module来说是可见的,     * implementation关键字引用的包对于其他module来说是不可见的。     */    //项目依赖    dependencies {        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")        //配置热部署        classpath ("org.springframework:springloaded:${springloadedVersion}")    }}group 'com.springcloud'version '1.0'apply plugin: 'java'apply plugin: 'org.springframework.boot'apply plugin: 'io.spring.dependency-management'// 配置该项目特有的依赖dependencies {    //如果要做jar包分离,此处必须要使用compile,不然系统启动失败,血的教训    compile(            //springboot            "org.springframework.boot:spring-boot-starter-web:$springBootVersion",            "org.springframework.boot:spring-boot-devtools:$springBootVersion",    )    testCompile 'org.springframework.boot:spring-boot-starter-test'    annotationProcessor 'org.projectlombok:lombok'    compileOnly 'org.projectlombok:lombok'}configurations {    // 所有需要忽略的包定义在此    //移除spring boot 默认logger依赖    all*.exclude module: 'spring-boot-starter-logging'}// 清除现有的lib目录task clearJar(type: Delete) {    delete "$buildDir/libs/lib"}// 将依赖包复制到lib目录task copyJar(type: Copy, dependsOn: 'clearJar') {    from configurations.compileClasspath    into "$buildDir/libs/lib"}bootJar {    // 例外所有的jar    excludes = ["*.jar"]    // lib目录的清除和复制任务    dependsOn clearJar    dependsOn copyJar    // 指定依赖包的路径    manifest {        attributes "Manifest-Version": 1.0,                'Class-Path': configurations.compileClasspath.files.collect { "lib/$it.name" }.join(' ')    }}

其中clearJar、copyJar及bootJar作用是将子工程(customer-center)单独打一个可运行的jar包,其依赖的jar包放到customer-center工程下的bulid | libs | lib下,如下图:

b32feb613705d4769444773e5e17e416.png

然后在项目中新增启动类及测试方法,如下:

package com.springcloud.zhifou.customer;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.RestController;/** * @author liuc */@RestController@SpringBootApplicationpublic class CustomerCenterApplication {    public static void main(String[] args) {        SpringApplication.run(CustomerCenterApplication.class, args);    }    @RequestMapping(value="/hello",method= RequestMethod.GET)    public String hello(){        return "Hello World";    }}

至此,可以使用gradle中的build工具编译打包了,然后进行测试

53a9c2194186c510a13c83f0b6c7d473.png

下面是build运行的结果:

0:24:09: Executing task 'build'...> Task :customer-center:compileJava UP-TO-DATE> Task :customer-center:processResources NO-SOURCE> Task :customer-center:classes UP-TO-DATE> Task :customer-center:clearJar> Task :customer-center:copyJar> Task :customer-center:bootJar UP-TO-DATE> Task :customer-center:jar SKIPPED> Task :customer-center:assemble UP-TO-DATE> Task :customer-center:compileTestJava NO-SOURCE> Task :customer-center:processTestResources NO-SOURCE> Task :customer-center:testClasses UP-TO-DATE> Task :customer-center:test NO-SOURCE> Task :customer-center:check UP-TO-DATE> Task :customer-center:build UP-TO-DATEDeprecated Gradle features were used in this build, making it incompatible with Gradle 7.0.Use '--warning-mode all' to show the individual deprecation warnings.See https://docs.gradle.org/6.5/userguide/command_line_interface.html#sec:command_line_warningsBUILD SUCCESSFUL in 2s4 actionable tasks: 2 executed, 2 up-to-date0:24:11: Task execution finished 'build'.

最后启动项目

a9f2083d1d9a61f264e2abbef87e85c7.png

通过浏览器访问测试一下,看项目是否可用

http://localhost:8080/hello

运行结果如图

ddb9640e0cc474b0f299aeb1d1e13f93.png

        如此文对大家有微薄帮助,胖友们给个赞再走呗!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值