如何在Gradle中为依赖版本定义变量?



我目前正在尝试将Maven项目迁移到Gradle

在我的Maven版本中,我在 pom:

中列出了依赖版本。
<properties>
    <spring.version>4.2.3.RELEASE</spring.version>
    <spring.boot.version>1.3.3.RELEASE</spring.boot.version>
    ...
</properties>

然后我可以在任何子模块中定义这样的依赖项:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>${spring.version}</version>
</dependency>

我试图在Gradle上做同样的事情,因为我的一些模块像这样共享依赖版本,如果我想升级Spring或做类似的操作,我不想修改多个地方。

我最接近它的是:

dependencies {
    ext.springVersion = '4.2.3.RELEASE'
    compile "org.springframework:spring-jdbc:$springVersion"
}

但这仍然不起作用。在Gradle中实现这一点的推荐方法是什么?或者Gradle有不同的处理方式吗?也许我对Maven的关注仍然太多,看不到其他解决方案。

请记住,在Gradle上的尝试并不是我想要的。我希望能够在单独的文件中定义依赖关系,而不是直接在将使用它的文件上。

以下build.gradle文件的配置对我的gradle version 4.5有效,在这里发布以供将来参考-

ext {
    springVersion = '5.0.3.RELEASE'
}
dependencies {
    compile  "org.springframework:spring-context:$springVersion"
}

使用双引号它对我有效

buildscript {
    ext {
        springBootVersion = '2.0.4.RELEASE'
        hazelCastVersion = '3.10.4'
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
    }
}
dependencies {
    compile('org.springframework.cloud:spring-cloud-starter-config')
    compile "com.hazelcast:hazelcast-spring:${hazelCastVersion}"
    compile group: 'com.hazelcast', name: 'hazelcast', version: "${hazelCastVersion}" }

您提供依赖版本的方式是正确的,应该可以工作。IntelliJ Idea在gradle构建脚本中有一些变量问题,所以你不必依赖它,只是试着运行你的构建并检查,是否下载了依赖项并且你的项目是正确构建的。

如果您希望将项目依赖项存储在单独的文件中,那么最常见的方法是在根构建中定义它们。脚本,通过subprojects关闭所有子项目,或通过allprojects,如果你想指定所有项目的依赖关系,包括根。它看起来像这样:

subprojects{
    dependencies{
        compile ...
    }
}

通过这种方式,您可以为根构建脚本中的子项目提供任何公共配置。阅读用户指南

或者你可以在根构建脚本中声明一个变量,将它初始化为一个包含你需要的所有依赖规范的映射,或者作为一个包含单个依赖列表的数组,并在你的子项目中使用这个变量,如果你需要的话。像这样在根目录:

ext.commomLibs = [
  'testlibs' : 'junit:junit:4.8'
]

注意,您可以将map的值定义为lib规范的数组,以使其指向所有这些依赖项。然后你可以在子项目中使用它:

dependencies{
    testCompile commomLibs.testlibs
}

另一种选择是使用带有依赖关系的单独构建脚本,并将其应用于所需的构建脚本,如

apply from: 'dependencies.script'

然后你可以把你的依赖放到依赖脚本中,然后在任何你需要这个依赖和/或可能是一些公共逻辑的构建脚本中应用它。

你现在可以在App Gradle Build中使用更接近依赖项的,如下所示:

dependencies {
    def daggerVersion = "2.24"
    implementation "com.google.dagger:dagger:$daggerVersion"
    annotationProcessor "com.google.dagger:dagger-compiler:$daggerVersion"
}

加上Vikas Sachdeva的回答:

在我的子项目中,这种方式对我不起作用。Gradle抛出一个错误'Could not find org.springframework:spring-context:$springVersion'。最后,我通过添加加号解决了这个问题。

例如

:

根gradle.properties:

springVersion = '5.0.3.RELEASE'
根build.gradle

dependencies {
    compile  "org.springframework:spring-context:${springVersion}"
}

子项目build.gradle

dependencies {
    compile  "org.springframework:spring-context:" + springVersion
}
我的gradle版本是5.4.1

或者你可以使用插件管理你的依赖版本。

io.spring.dependency-management

参考:https://docs.spring.io/dependency-management-plugin/docs/current/reference/html/

gradle v6.1.1上,最简单的是:

dependencies {
    def jerseyVersion = '2.29.1'
    compile group: 'org.glassfish.jersey.core', name: 'jersey-client', version: jerseyVersion
    // ...
}

本文描述的gradle中管理依赖项的现代方法:https://docs.gradle.org/current/userguide/platforms.html子:central-declaration-of-dependencies

我个人更喜欢。toml文件:https://docs.gradle.org/current/userguide/platforms.html#sub:conventional-dependencies-toml它是清晰的,类型安全的,并且IDEA过滤器与它配合得很好。

在Gradle中将依赖版本声明为变量的最佳实践

对于包含多个模块的Android项目

在项目级别定义某些属性并在所有模块之间共享它们可能很有用。您可以通过向顶级build.gradle文件中的ext块添加额外的属性来实现这一点,如下所示。

buildscript块中添加你的版本变量

ext {
    version_navigation = "2.5.1"
    version_lifecycle = "2.5.1"
    version_kotlin = "1.7.10"
}

对于单模块项目(仅限app模块),使用app的build.gradle

在根目录中,在ext块中添加版本变量

ext {
    version_navigation = "2.5.1"
    version_lifecycle = "2.5.1"
    version_kotlin = "1.7.10"
}

我有一个替代的语法糖。我猜这是写依赖的"长"方式。

大师"gradle.build "

plugins {
    id 'java'
}

ext {
    slf4jApiVersion = '1.7.28'
    junitVersion = '4.12'
}
gradle.build
dependencies {
    testCompile group: 'junit', name: 'junit', version: "${junitVersion}"
    compile group: 'org.slf4j', name: 'slf4j-api', version: "${slf4jApiVersion}"
}

注意group, name和version的分隔…组值和名称值周围用单引号,版本值变量周围用双引号。

另一种方法:在构建的同一目录中创建一个文件。gradle 应用。将这个新文件命名为:dependencies.gradle在你的建筑里。gradle app将这行添加到顶部

apply from: 'dependencies.gradle'

在依赖项中定义变量。Gradle如下:

ext {
versions = [
    camerax_version : "1.1.0-alpha10",
    camerax_extra_version : "1.0.0-alpha24",
    constraintlayout : "2.0.3",
    appcompat : "1.2.0"
]
camerax = [
        camerax_core : "androidx.camera:camera-core:${versions.camerax_version}",
        camerax_camera2 : "androidx.camera:camera-camera2:${versions.camerax_version}",
        camerax_lifecycle : "androidx.camera:camera-lifecycle:${versions.camerax_version}",
        camerax_extensions : "androidx.camera:camera-extensions:${versions.camerax_extra_version}",
        camerax_view : "androidx.camera:camera-view:${versions.camerax_extra_version}"
]
androidx = [
        constraints_layout : "androidx.constraintlayout:constraintlayout:${versions.constraintlayout}",
        appcompat : 'androidx.appcompat:appcompat:${versions.appcompat}'
]}

最后在构建中使用这些变量。gradle module

implementation camerax.camerax_core
implementation camerax.camerax_camera2
implementation camerax.camerax_lifecycle
implementation camerax.camerax_extensions
implementation camerax.camerax_view

相关内容

  • 没有找到相关文章

最新更新