gradle工程的多模块设置
Gradle

之前我们在使用maven构建java项目的时候,经常会拆分多模块。在maven工程中,我们通过dependencyManagement来管理整个工程的模块的依赖。那么在gradle的工程里,我们要这么做,要怎么处理呢?
首先,我们我们找到gradle 是有个spring management的插件的。

compile group: 'io.spring.dependency-management', name: 'io.spring.dependency-management.gradle.plugin', version: '1.0.9.RELEASE', ext: 'pom'



文档地址:https://docs.spring.io/dependency-management-plugin/docs/current-SNAPSHOT/reference/html/

gradle的父工程可以配置subobjects,其中的配置适用于所有的子模块。在subobjects中,利用dependencyManagement 对所有模块的版本进行管理。

dependencyManagement{
    dependencies {
        dependency group: 'com.google.guava', name: 'guava', version: '29.0-jre'
    }
}



在模块core 里,我们就可以直接添加依赖 而不用写入版本号了。

贴上完整的父工程和子模块的配置。
父工程:

plugins {
    id 'java'
    id 'org.springframework.boot' version '2.3.1.RELEASE'
    id 'io.spring.dependency-management' version '1.0.9.RELEASE'
}

group 'com.example'
version '1.0-SNAPSHOT'

sourceCompatibility = '1.8'
targetCompatibility = '1.8'


repositories {
    mavenCentral()
}

bootJar {
    enabled = false
}

jar {
    enabled = true
}

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.12'
}

subprojects {
    apply plugin: "java"
    sourceCompatibility = '1.8'
    targetCompatibility = '1.8'

    configurations {
        compileOnly {
            extendsFrom annotationProcessor
        }
    }

    dependencyManagement{
        dependencies {
            dependency group: 'com.google.guava', name: 'guava', version: '29.0-jre'
        }
    }

}



子模块:

plugins {
    id 'java'
}

group 'com.example'
version '1.0-SNAPSHOT'

repositories {
    mavenCentral()
}
jar {
    enabled = true
}

dependencies {
    annotationProcessor 'org.projectlombok:lombok'
    testAnnotationProcessor 'org.projectlombok:lombok'
    testImplementation('org.springframework.boot:spring-boot-starter-test') {
        exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
    }
    testImplementation 'org.springframework.security:spring-security-test'

    compile 'org.projectlombok:lombok'

    compile group: 'com.google.guava', name: 'guava'
}
暂无评论