如何在多个gradle项目的一个地方声明依赖版本

时间:2019-06-24 10:45:54

标签: maven gradle grails groovy gradle-plugin

我在一个具有多个grails服务,插件和库的项目上工作,所有这些都使用gradle构建,并且它们的依赖项在 Form2 f2 = new Form2(); f2.Show(); this.Close(); 文件中声明,每个项目一个,这很有意义。我希望。

在maven中,我曾经能够在一个父项目pom或pom模板中声明所有依赖项的版本,并且仅在需要它们的项目中包含这些依赖项而没有版本。这样一来,就可以轻松升级依赖关系。有没有简单的方法可以做到这一点?

伪代码示例:

master_template / build.gradle

build.gradle

service_a / build.gradle

    dependencies {
        joda-time:joda-time:2.9.1
        cglib:cglib:3.2.9
        javax.servlet:javax.servlet-api:3.1.0
    }

service_b / build.gradle

    parent: master_template
    dependencies {
        joda-time:joda-time
        javax.servlet:javax.servlet-api
    }

2 个答案:

答案 0 :(得分:3)

您可以像创建带有父pom的maven一样创建‘Try this API’

为了管理父级中的依赖项,我使用了multi module project

您的父母build.gradle如下所示:

subprojects {
    apply plugin: "io.spring.dependency-management"

    sourceCompatibility = 1.8
    targetCompatibility = 1.8

    check.dependsOn dependencyCheckAggregate

    repositories {
        mavenLocal()
        jcenter()
        // other repos
    }

    dependencyManagement {

        def jacksonVersion = "2.+"

        dependencies {
            dependency "com.fasterxml.jackson.core:jackson-annotations:$jacksonVersion"
            dependency "com.fasterxml.jackson.core:jackson-core:$jacksonVersion"
            dependency "com.fasterxml.jackson.core:jackson-databind:$jacksonVersion"
            dependency "com.fasterxml.jackson.datatype:jackson-datatype-jdk8:$jacksonVersion"
            dependency "com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider:$jacksonVersion"
        }
    }
}

现在,您可以将依赖项添加到子模块中,而无需指定版本。

答案 1 :(得分:0)

通过使用Gradle的默认apply from: 'other.gradle',您可以轻松实现所需的目标,因此不需要其他插件。

在我的微服务项目中,我正在使用类似的东西:

common-gradle / env.gradle

apply plugin:'groovy'

ext.compile = [ 'joda-time:joda-time:2.9.1', 'cglib:cglib:3.2.9` ]
ext.testCompile = [ 'org.spockframework:spock-core:1.3-groovy-2.5' ]

common-gradle / dependencies.gradle

dependencies {
  compile ext.compile
  testCompile ext.testCompile
}

以及用法

service_a / build.gradle

apply from:'../common-gradle/env.gradle'

ext.compile << 'ch.qos.logback:logback-classic:1.2.3'

apply from:'../common-gradle/dependencies.gradle'

因此,我的每个build.gradle文件仅包含3-5行关键信息,例如项目名称和版本。

您不需要将common-gradle作为项目导入IDE,只需使用符号链接即可避免使用外部引用。同样,在类似Jenkins的管道上构建期间,您唯一要做的就是将common-gradle存储库检出到工作目录中。