在build.gradle
文件的此片段中,对${appengineVersion}
(第11行)的第一次引用会导致错误。但第二个参考(第27行)工作正常。那是为什么?
为了让它正常工作,我必须在第11行显式包含版本号...这意味着我将在下次忘记更新它。如何解决?
apply plugin: 'war'
apply plugin: 'appengine'
def appengineVersion = "1.9.48"
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath "com.google.appengine:gradle-appengine-plugin:${appengineVersion}"
}
}
war {
from 'src/main/webUI/app'
exclude('src/main/webUI/app/node_modules')
}
repositories {
mavenLocal()
mavenCentral()
}
dependencies {
appengineSdk "com.google.appengine:appengine-java-sdk:${appengineVersion}"
compile "javax.servlet:servlet-api:2.5"
...
答案 0 :(得分:2)
在项目构建文件的顶层声明变量并不会使它们对所有Gradle块可见。 buildscript {}
很特殊,它会在脚本的任何其他部分之前得到评估。您可以将声明移到buildscript
,但它也应该使其对其他块可见:
buildscript {
def appengineVersion = "1.9.48"
...
但你需要使用像
dependencies {
appengineSdk "com.google.appengine:appengine-java-sdk:" + appengineVersion
答案 1 :(得分:2)
答案 2 :(得分:2)
解决方案结合了Oleg和RaGe的答案:
将appengineVersion的声明移动到buildscript块中并在ext命名空间中定义它。
buildscript {
ext.appengineVersion = "1.9.48"
repositories {
mavenCentral()
}
dependencies {
classpath "com.google.appengine:gradle-appengine-plugin:${appengineVersion}"
}
}
这允许变量由buildscript依赖项和项目依赖项解决:
dependencies {
appengineSdk "com.google.appengine:appengine-java-sdk:${appengineVersion}"
compile "javax.servlet:servlet-api:2.5"
compile "com.google.appengine:appengine-api-1.0-sdk:${appengineVersion}"
这两个答案都是解决方案的关键部分。但不幸的是,我不能接受2个答案,所以我自己回答(并对两个答案进行投票)。