在 Gradle 脚本中使用变量

我在我的项目中使用了 Gradle。我有一个任务,做一些额外的配置与我的战争。我需要构建一个字符串来在我的任务中使用,比如说:

task extraStuff{
doStuff 'org.springframework:spring-web:3.0.6.RELEASE@war'
}

这样挺好的。我需要做的是定义 version (实际上已经在属性文件中定义了) ,并在任务中使用如下:

springVersion=3.0.6.RELEASE


task extraStuff{
doStuff 'org.springframework:spring-web:${springVersion}@war'
}

我的问题是,Spring 版本不被认为是变量。那么我怎样才能在字符串中传递它呢?

100143 次浏览

我认为问题可能出在字符串文字分隔符上:

  1. 字符串的定义与 groovy中完全一样,所以用单引号或双引号括起来(例如 "3.0.6.RELEASE") ;
  2. 如果我没记错的话,Gstrings没有被解析成单引号字符串(包括单引号 '...'和三引号 '''...''') ;

所以密码是:

springVersion = '3.0.6.RELEASE' //or with double quotes "..."


task extraStuff{
doStuff "org.springframework:spring-web:${springVersion}@war"
}

如果您正在使用 格拉德尔开发一个 仿生人应用程序,您可以声明一个变量(即持有一个依赖版本) ,这要感谢关键字 def,如下所示:

def version = '1.2'
    

dependencies {
compile "groupId:artifactId:${version}"
}

希望有帮助!

在机器人上实际上有两种可能性来实现这一点。这实际上取决于哪个适合你的需要。这两种可能性各有利弊。可以使用 def变量或 ext{}块。变量 def是可怕的,因为它可以让你点击变量,并指出确切的地方,它是定义在文件相比,ext{}块没有指向那个确切的变量。另一方面,ext{}有一个很好的优势,那就是你可以从 project_name/build.gradle引用变量到 project_name/app/build.gradle,这在某些情况下是非常有用的,但正如我所说的,如果你点击那个变量,让我们说只在一个文件中,它不会指出该变量的定义,这是非常糟糕的,因为它需要你更多的搜索时间,如果你的依赖列表增长。

1) def 选项,这可能是最好的,并节省您的搜索时间。

def lifecycle = '2.0.0'


dependencies {
implementation 'androidx.lifecycle:lifecycle-extensions:$lifecycle'
}

2)第二个 ext {}块。如果依赖关系列表不是很大,那么它还可以。

ext {
lifecycle = '1.1.1'
}


dependencies {
implementation 'androidx.lifecycle:lifecycle-extensions:$lifecycle'
}

3)在某些情况下,如果想在 project_name/build.gradle 还有 project_name/app/build.gradle < strong > use ext {}之间共享变量,请使用 ext {}

Project _ name/build.gradle中,你定义 kotlin_shared_variable:

buildscript {
ext.kotlin_shared_variable = '1.3.41'


dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_shared_variable"
}
}

可以在 Project _ name/app/build.gradle中使用

dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_shared_variable"
}

当然你也可以把它们结合起来。

给你

如果没有内插表达式,双引号字符串是普通的 java.lang.String; 如果存在内插,则是 groovy.lang.GString 实例。

Gradle 使用 Groovy 作为 DSL。这里“ ${ springVersion }”是一个占位符,您需要的是插入,因此应该使用双引号,只有 GString 中的双引号具有插入的能力。