天天看點

gradle 指定springcloud 版本_使用Gradle建構SpringBoot項目

gradle 指定springcloud 版本_使用Gradle建構SpringBoot項目

        本項目使用Gradle建構SpringBoot項目,将不同的業務進行不同的子產品劃分;

- 編輯器:Intellij IDEA- 建構工具:Gradle6.5- SpringBoot版本:2.3.2.RELEASE- 版本管理:GitHub- 個人GitHub位址: - 項目Clone位址:https://github.com/liuc8023/zhifou.git
           

項目結構如下

gradle 指定springcloud 版本_使用Gradle建構SpringBoot項目
項目建構

        首先建立一個項目,我們使用IDEA建構一個Gradle Java項目,作為項目的最外層,隻做為整個項目的容器,是以最外層項目隻建構為普通的Gradle項目即可; 

File | New | Project

gradle 指定springcloud 版本_使用Gradle建構SpringBoot項目

填寫GroupId與ArtifactId; 

一般正式項目的GroupId為com.*開頭,也可因個人習慣自定義,具體規則大家可以參考命名規範,ArtifactId為項目名稱; 

gradle 指定springcloud 版本_使用Gradle建構SpringBoot項目

給項目設定自己本地的Gradle位址

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

gradle 指定springcloud 版本_使用Gradle建構SpringBoot項目

        項目已經建立好了,我們開始建立各個子產品,在不同項目中,子產品劃分的方式也會不同,具體的子產品劃分可以按照實際項目的需求進行劃分;

        下面就可以按照自己的需求建立子產品: 

右鍵項目,點選 New -> Moduel,選擇Gradle,如下圖:

gradle 指定springcloud 版本_使用Gradle建構SpringBoot項目

給新子產品設定屬性

gradle 指定springcloud 版本_使用Gradle建構SpringBoot項目

父層項目settings.gradle設定如下:

rootProject.name = 'zhifou'include 'customer-center'          

父層項目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下,如下圖:

gradle 指定springcloud 版本_使用Gradle建構SpringBoot項目

然後在項目中新增啟動類及測試方法,如下:

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 */@RestControll[email protected] 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工具編譯打包了,然後進行測試

gradle 指定springcloud 版本_使用Gradle建構SpringBoot項目

下面是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'.
           

最後啟動項目

gradle 指定springcloud 版本_使用Gradle建構SpringBoot項目

通過浏覽器通路測試一下,看項目是否可用

http://localhost:8080/hello

運作結果如圖

gradle 指定springcloud 版本_使用Gradle建構SpringBoot項目

        如此文對大家有微薄幫助,胖友們給個贊再走呗!