【采坑記錄】maven項目轉(zhuǎn)gradle

起因:

原來項目基本都是基于maven來管理,但是隨著boot大哥的不斷更新及市面上也大部分轉(zhuǎn)用gradle,公司內(nèi)部存在maven管理和gradle項目參差不一的情況,所以想嘗試統(tǒng)一都用gradle來做項目,減少其他開發(fā)人員的成本

基礎(chǔ)環(huán)境:

  • IntelliJ IDEA Community Edition 2020.1.3
  • jdk:1.8
  • springboot: 2.3.1.RELEASE

步驟:

1. 轉(zhuǎn)換:

Maven項目轉(zhuǎn)Gradle項目,在pom文件所在的目錄中 打開Terminal中輸入:

gradle init --type pom

(如果idea中g(shù)radle有配置好,也可以直接在idea中右擊pom.xml文件 Open Terminal 直接在控制臺中運(yùn)行命令)

然后重新打開gradle項目,不然直接gradle build可能會報錯 ,重新選擇import Gradle項目基本上就沒問題了

注:有的同學(xué)不知道首次怎么import gradle項目的,可以進(jìn)行如下操作(知道的同學(xué)跳過):

File->close project 進(jìn)入idea首頁,import project;選擇最外層的父級bulid.gradle文件即可

image

image

我們可以看到maven項目已經(jīng)轉(zhuǎn)換成gradle項目


image

2. 包依賴管理

gradle實現(xiàn)類似maven的dependency-management 包依賴管理大體上有兩種方式

    1. 依賴項管理DSL(就是在父級的bulid.gradle中維護(hù)包的版本信息)
    1. 導(dǎo)入原有已存在的maven-bom,本文用的就是該方式(基本就是maven常用的parent-pom.xml)

原項目maven-bom引用:

因為我們原來的maven項目的包管理基本上都是依賴于一個parent-bom來做版本控制,如果使用gradle的話又得重新配置父工程的bulid.gradle,麻煩誒,故使用gradle的mavenBom引入原有的parent-bom;

1)首先先生成這個maven-bom**(會的繼續(xù)跳過)

  • 刪除無用的pom.xml文件,留下項目中的父級pom.xml
  • 右擊這個管理包版本的父級pom.xml -> Add AS Maven Project
  • 本地使用install到本地倉庫,私服使用deploy發(fā)布到私服倉庫?


    image

2)要使用包的依賴管理,就需要引入 **dependency-management-plugin插件

3)要正常使用打包服務(wù),就需要引入**spring-boot-gradle-plugin(配置參考下面)

【注】:直接在父級的bulid.gradle 修改配置,可以避免子項目的包引入的重復(fù)編寫
父級 bulid.gradle:

buildscript {
#變量定義
    ext {
        springBootVersion = '2.3.1.RELEASE'
        dependencyVersion = '1.0.9.RELEASE'
        tangoParentBomVersion = '1.0.1'
    }

#插件庫
    repositories {
        gradlePluginPortal()
    }

#引入插件
    dependencies {
        classpath "io.spring.gradle:dependency-management-plugin:$dependencyVersion"
        classpath "org.springframework.boot:spring-boot-gradle-plugin:$springBootVersion"
    }
}
# 子項目需要的配置
subprojects {
#子項目引用插件
    apply plugin: 'java'
    apply plugin: 'maven-publish'
    apply plugin: 'io.spring.dependency-management'
#子項目倉庫指定
    repositories {
        mavenLocal()
        maven {
            url = 'https://maven.aliyun.com/repository/public/'
        }
        maven {
            url = 'http://repo.maven.apache.org/maven2'
        }
    }
#我們生成的自定義 maven-bom
    dependencyManagement {
        imports {
            mavenBom "com.tango:parent-starter-bom:$tangoParentBomVersion"
        }
    }
}

4)ok,準(zhǔn)備完成,在子項目中我們就可以直接引用自定義的maven-bom中的包而不需要去指定版本了

以下為子項目的 bulid.gradle

dependencies {
    compile 'org.springframework.boot:spring-boot-starter-web'
    compile 'org.springframework.boot:spring-boot-starter-actuator'
    compile 'org.springframework.boot:spring-boot-starter-aop'
    compile 'org.projectlombok:lombok'
    annotationProcessor 'org.projectlombok:lombok'
    compile 'org.apache.commons:commons-lang3'
    compile 'org.springframework.boot:spring-boot-starter-validation'
    testCompile 'org.springframework.boot:spring-boot-starter-test'
    testCompile 'junit:junit:4.12'
}
description = 'service-api'

4)ok,運(yùn)行子項目,依賴正常,正常啟動

image

3. 打包發(fā)布

打包的時候發(fā)現(xiàn)jar中并沒有包含依賴的libs包,jar包只有100k明顯的不對,運(yùn)行jar包報錯:找不到主清單屬性或找不到主類。這時候需要引入打包的插件:spring-boot-gradle-plugin,剛才我們在父級的bulid.gradle中已經(jīng)引入,但是我們還需要在子項目中應(yīng)用,(不知道為什么在父級配置中設(shè)置無效,必須得在子項目中引入才起效):

子項目 gradle文件中加入引用

jar.enabled = true
apply plugin: 'org.springframework.boot'

gradle 重新clean->bulid,此時在目錄下看到包已經(jīng)正常,也可以正常運(yùn)行


image

總結(jié):

第一次用gradle還是遇到挺多不清楚的坑,主要的可能是包依賴的這個問題
排版比較亂,各位看官有看不懂的地方,還請指出哈,不喜勿噴,實力有限

參考:

包依賴:https://blog.csdn.net/u013632755/article/details/100714691
bulid亂碼問題:https://blog.csdn.net/qq_25740665/article/details/105609876
為何轉(zhuǎn)gradle:https://blog.csdn.net/huang_550/article/details/107403449
CSDN地址:http://www.itdecent.cn/p/deb61835497d
關(guān)聯(lián)maven-bom install問題:http://www.itdecent.cn/p/031f858f08bb

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容