【采坑记录】maven项目转gradle

起因:

原来项目基本都是基于maven来管理,但是随着boot大哥的不断更新及市面上也大部分转用gradle,公司内部存在maven管理和gradle项目参差不一的情况,所以想尝试统一都用gradle来做项目,减少其他开发人员的成本

基础环境:

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

    Maven项目转Gradle项目,在pom文件所在的目录中 打开Terminal中输入:

    gradle init --type pom
    

    (如果idea中gradle有配置好,也可以直接在idea中右击pom.xml文件 Open Terminal 直接在控制台中运行命令)

    然后重新打开gradle项目,不然直接gradle build可能会报错 ,重新选择import Gradle项目基本上就没问题了

    注:有的同学不知道首次怎么import gradle项目的,可以进行如下操作(知道的同学跳过):

    File->close project 进入idea首页,import project;选择最外层的父级bulid.gradle文件即可

    原项目maven-bom引用:

    因为我们原来的maven项目的包管理基本上都是依赖于一个parent-bom来做版本控制,如果使用gradle的话又得重新配置父工程的bulid.gradle,麻烦诶,故使用gradle的mavenBom引入原有的parent-bom;

    1)首先先生成这个maven-bom**(会的继续跳过)

  • 删除无用的pom.xml文件,留下项目中的父级pom.xml
  • 右击这个管理包版本的父级pom.xml -> Add AS Maven Project
  • 本地使用install到本地仓库,私服使用deploy发布到私服仓库​

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

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

    【注】:直接在父级的bulid.gradle 修改配置,可以避免子项目的包引入的重复编写
    父级 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,准备完成,在子项目中我们就可以直接引用自定义的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,运行子项目,依赖正常,正常启动

    3. 打包发布

    打包的时候发现jar中并没有包含依赖的libs包,jar包只有100k明显的不对,运行jar包报错:找不到主清单属性或找不到主类。这时候需要引入打包的插件:spring-boot-gradle-plugin,刚才我们在父级的bulid.gradle中已经引入,但是我们还需要在子项目中应用,(不知道为什么在父级配置中设置无效,必须得在子项目中引入才起效):

    子项目 gradle文件中加入引用

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

    gradle 重新clean->bulid,此时在目录下看到包已经正常,也可以正常运行

    排版比较乱,各位看官有看不懂的地方,还请指出哈,不喜勿喷,实力有限