天天看點

gradle - spring boot項目

gradle - spring boot 項目

基于gradle 7.6

項目依賴

└─demo
    │  settings.gradle
    │  build.gradle
    │  version.gradle  //版本控制
    │  publish.gradle  //釋出
    ├─demo-svc       //子項目
    │  │  .gitignore
    │  │  build.gradle
    ├─demo-web      //子項目
    │  │  .gitignore
    │  │  build.gradle
    └─gradle
        └─wrapper
           

項目目錄

└─demo
    │  .gitignore
    │  build.gradle
    │  gradlew
    │  gradlew.bat
    │  HELP.md
    │  settings.gradle
    │  version.gradle
    ├─demo-svc
    │  │  .gitignore
    │  │  build.gradle
    │  │
    │  └─src
    │      ├─main
    │      │  ├─java
    │      │  │  └─com
    │      │  │      └─example
    │      │  │          └─demosvc
    │      │  │              ├─dal
    │      │  │              │  ├─domain
    │      │  │              │  │      AccountModel.java
    │      │  │              │  ├─mapper
    │      │  │              │  │      AccountModelMapper.java
    │      │  │              │  └─service
    │      │  │              │      │  AccountModelService.java
    │      │  │              │      └─impl
    │      │  │              │              AccountModelServiceImpl.java
    │      │  │              └─manager
    │      │  └─resources
    │      │      └─mapper
    │      │              AccountModelMapper.xml
    │      └─test
    │          └─java
    │              └─com
    │                  └─example
    │                      └─demosvc
    │                              DemoSvcApplicationTests.java
    │
    ├─demo-web
    │  │  .gitignore
    │  │  build.gradle
    │  │
    │  └─src
    │      ├─main
    │      │  ├─java
    │      │  │  └─com
    │      │  │      └─example
    │      │  │          └─web
    │      │  │              │  DemoWebApplication.java
    │      │  │              └─controller
    │      │  │                      AccountController.java
    │      │  ├─profiles
    │      │  │  ├─dev
    │      │  │  │      cfg.properties
    │      │  │  ├─test
    │      │  │  │      cfg.properties
    │      │  │  └─uat
    │      │  │          cfg.properties
    │      │  └─resources
    │      │      │  application.properties
    │      │      ├─static
    │      │      └─templates
    │      └─test
    │          └─java
    │              └─com
    │                  └─example
    │                      └─web
    │                              DemoWebApplicationTests.java
    └─gradle
        └─wrapper
                gradle-wrapper.jar
                gradle-wrapper.properties
           

demo 目錄

setting.gradle

rootProject.name = 'demo'

include 'demo-web'
include 'demo-svc'

           

version.gradle

版本管理, 用雙引号

// 依賴版本管理
ext {
    version = [
            "mysqlConnectorJVersion"          : "8.0.31",
            "mybatisPlusBootStarterVersion"   : "3.4.3",
            "mybatisSpringBootStarterVersion": "3.0.0"
    ]

    dependencies = [
            "mysql"                   : "com.mysql:mysql-connector-j:${version.mysqlConnectorJVersion}",
            "mybatisPlusBootStarter"  : "com.baomidou:mybatis-plus-boot-starter:${version.mybatisPlusBootStarterVersion}",
            "mybatisSpringBootStarter": "org.mybatis.spring.boot:mybatis-spring-boot-starter:${version.mybatisSpringBootStarterVersion}"
    ]
}
           

build.gradle

buildscript {
    //定義擴充屬性(可選)
    ext {
        springBootVersion = "2.4.5"
    }
    repositories {
        mavenLocal()
        mavenCentral()
    }
    dependencies {
        //管理boot-版本
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
    }
}


//引入版本
apply from: 'version.gradle'


allprojects {
    group = 'com.example'
    version = '0.0.1-SNAPSHOT'
    apply plugin: 'idea'
}

subprojects {
    apply plugin: 'java'
    apply plugin: 'java-library'  // 使用 api 方式引用工程-間接傳遞
    apply plugin: 'maven-publish' // install jar to 本地庫
    apply plugin: 'signing'
    apply plugin: 'org.springframework.boot'//使用springboot插件
    apply plugin: 'io.spring.dependency-management'//版本管理插件
//    println  "Root project:   ${project.rootProject}";
//    println  "  rootDir:      ${project.rootDir}"
//    println  "  projectDir:   ${project.projectDir}";
//    println  "  project dir:  ${System.getProperty("user.dir")}";
    //jdk版本
    sourceCompatibility = 1.8
    targetCompatibility = 1.8
    // Java 源碼和文檔的編碼
    [compileJava, compileTestJava, javadoc]*.options*.encoding = 'UTF-8'

    tasks.withType(JavaCompile) {
        options.encoding = 'UTF-8'
    }
/*
    //指定 wrapper, 約定相同 gradle版本,在 gradle下 gradle-wrapper.properties 約定
    task wrapper(type: Wrapper) {
        gradleVersion = '7.6'
    }
*/


    repositories {
        //maven 本地倉庫,必須配置M2_HOME=maven安裝路徑
        //user_home->M2_HOME/conf/setting.xml 下指定倉庫
        mavenLocal()
        mavenCentral()
        maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' }
    }

    //=========================依賴管理=======================//
    dependencyManagement {
        dependencies {
            for (depJar in rootProject.ext.dependencies) {
                dependency depJar.value
            }
        }
    }

    dependencies {
        compileOnly 'org.projectlombok:lombok'
        annotationProcessor 'org.projectlombok:lombok'
    }

    //===================================單元測試=====================
    test {
        useJUnitPlatform()
    }

    //指定 gradle 腳本
    tasks.register("prepareKotlinBuildScriptModel") {}

    //==================================打包方式=====================
    bootJar {
        enabled = false
    }
    jar {
        enabled = true
    }
}

//子項目統一依賴管理
project(':demo-web') {

    group = 'com.example'
    version = '0.0.1-SNAPSHOT'
    // publish.gradle 要在 版本之後

    apply from: "${project.rootDir}/publish.gradle"

    //使用 api 引入項目
    dependencies {
        compileOnly 'org.projectlombok:lombok'
        annotationProcessor 'org.projectlombok:lombok'
        testImplementation 'org.springframework.boot:spring-boot-starter-test'
        //junit5
        testImplementation 'org.junit.jupiter:junit-jupiter-api'
        testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine'
        api project(':demo-svc')
    }
}

project(':demo-svc') {

    group = 'com.example'
    version = '0.0.1'
    // gradle :demo-svc:publishMavenJavaPublicationToMavenRepository
    apply from: "${project.rootDir}/publish.gradle"
    //安裝到本地庫插件
    dependencies {
        api 'org.springframework.boot:spring-boot-starter-web'
        api 'com.baomidou:mybatis-plus-boot-starter:'
        api 'org.mybatis.spring.boot:mybatis-spring-boot-starter'
        compileOnly 'org.projectlombok:lombok'
        api 'com.mysql:mysql-connector-j'
        annotationProcessor 'org.projectlombok:lombok'
        testImplementation 'org.springframework.boot:spring-boot-starter-test'
    }

}
           

demo-svc

service 實作,dao…

build.gradle

jar {
    enabled = true
    baseName('demo-svc')
}
           

demo-web

build.gradle, 運作時傳入

-Denv=dev

可以根據 環境運作

def env = project.hasProperty('env') ? project.env : 'dev'
//将其他目錄資源copy到 src/main/resources 目錄下
sourceSets{
    main{
        resources{
            srcDirs = ["src/main/resources","src/main/profiles/${env}"]
        }
    }
}

bootJar {
    enabled = true
    baseName('demo-web')
}
           

publish.gradle 釋出

//=============================打包釋出=====================
//打包
task sourceJar(type: Jar) {
    from sourceSets.main.allJava
}

publish.dependsOn(build)
/**
 * 1.publishToMavenLocal: 釋出到 user_home/.m2/setting.xml 指定的本地倉庫
 *
 * 2.publishMavenPublicationToMavenLocal : 釋出到遠端指定倉庫
 *
 */
publishing {
    publications {
        mavenJava(MavenPublication) {

            //指定group/artifact/version資訊,可以不填。預設使用項目group/name/version作為groupId/artifactId/version
            groupId project.group
            artifactId project.name
            version project.version

            //如果是war包填寫components.web,如果是jar包填寫components.java
            from components.java
            versionMapping {
                usage('java-api') {
                    fromResolutionOf('runtimeClasspath')
                }
                usage('java-runtime') {
                    fromResolutionResult()
                }
            }
            //配置上傳源碼
            artifact sourceJar {
                classifier "sources"
            }
        }
    }

    //私服
    repositories {
        //publishMavenPublicationToMavenLocal
        maven {
            //允許非 https
            allowInsecureProtocol = true
            def releasesRepoUrl = "http://192.xxx.x:8081/repository/maven-releases/"
            def snapshotsRepoUrl = "http://192.xxx.x:8081/repository/maven-snapshots/"
            //指定要上傳的maven私服倉庫
            url = version.endsWith('SNAPSHOT') ? snapshotsRepoUrl : releasesRepoUrl
            println "${project.name}-${version} deploy to -${url}"
            //認證使用者和密碼
            credentials {
                username 'admin'
                password 'admin123'
            }
        }
    }
}
           

繼續閱讀