我在项目中使用Gradle。我有一个任务是用我的战争做一些额外的配置。我需要构建一个在我的任务中使用的字符串,比如说,我有:
task extraStuff{
doStuff 'org.springframework:spring-web:3.0.6.RELEASE@war'
}
这很好用。我需要做的是定义版本(实际上已在属性文件中定义)并在以下任务中使用它:
springVersion=3.0.6.RELEASE
task extraStuff{
doStuff 'org.springframework:spring-web:${springVersion}@war'
}
我的问题是spring版本不被识别为变量。那么如何在字符串中传递它呢?
答案 0 :(得分:23)
我认为问题可能出在字符串文字分隔符上:
groovy
完全相同,因此请将其用单引号或双引号括起来(例如"3.0.6.RELEASE"
); Gstrings
不会用单引号字符串解析(单'...'
或三'''...'''
个); 所以代码将是:
springVersion = '3.0.6.RELEASE' //or with double quotes "..."
task extraStuff{
doStuff "org.springframework:spring-web:${springVersion}@war"
}
答案 1 :(得分:21)
如果您正在使用 Gradle 开发 Android应用,要声明变量(即保留一些依赖版本),您应该使用关键字 { {1}} 如下所示:
def
答案 2 :(得分:0)
在android上,实际上有两种方法可以实现此目的。这取决于您的需求。这两种可能性各有利弊。您可以使用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
之间使用ext {} 共享变量>
您定义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"
}
当然可以将它们组合在一起。