为什么这个字符串替换/连接在Gradle中不起作用?
在为什么这个字符串替换/连接在Gradle中不起作用?,gradle,Gradle,在build.gradle文件的这个片段中,对${appengineVersion}的第一个引用(第11行)会导致错误。但是第二个参考(第27行)工作正常。为什么呢 为了让它工作,我必须在第11行显式地包含版本号…这意味着我下次会忘记更新它。如何解决这个问题 apply插件:“war” 应用插件:“appengine” def appengineVersion=“1.9.48” 构建脚本{ 存储库{ mavenCentral() } 依赖关系{ classpath“com.google.appe
build.gradle
文件的这个片段中,对${appengineVersion}
的第一个引用(第11行)会导致错误。但是第二个参考(第27行)工作正常。为什么呢
为了让它工作,我必须在第11行显式地包含版本号…这意味着我下次会忘记更新它。如何解决这个问题
apply插件:“war”
应用插件:“appengine”
def appengineVersion=“1.9.48”
构建脚本{
存储库{
mavenCentral()
}
依赖关系{
classpath“com.google.appengine:gradle-appengine插件:${appengineVersion}”
}
}
战争{
来自“src/main/webUI/app”
排除('src/main/webUI/app/node_模块')
}
存储库{
mavenLocal()
mavenCentral()
}
依赖关系{
appengineSdk“com.google.appengine:appengine java sdk:${appengineVersion}”
编译“javax.servlet:ServletAPI:2.5”
...
在项目生成文件的顶层声明变量并不会使它们对所有Gradle块可见。buildscript{}
是特殊的,它会在脚本的任何其他部分之前进行计算。您可以将声明移到buildscript
中,但它也应该使其他块可见:
buildscript {
def appengineVersion = "1.9.48"
...
但你需要像这样使用
dependencies {
appengineSdk "com.google.appengine:appengine-java-sdk:" + appengineVersion
标准gradle实践是在
ext
命名空间中声明用户定义的属性。请参阅
你应该做:
ext.appengineVersion = "1.9.48"
解决方案是Oleg和RaGe的答案的组合: 将appengineVersion的声明移动到buildscript块中,并在ext命名空间中定义它
buildscript {
ext.appengineVersion = "1.9.48"
repositories {
mavenCentral()
}
dependencies {
classpath "com.google.appengine:gradle-appengine-plugin:${appengineVersion}"
}
}
这允许通过buildscript依赖项和项目依赖项解析it变量:
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}"
这两个答案都是解决方案的关键部分。但不幸的是,我不能接受两个答案,所以我自己回答(并对两个答案进行投票)。具体错误是:“在org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler上找不到属性'appengineVersion'_Decorated@6f9c2c4"谢谢!那是解决方案的一半:)谢谢!那是解决方案的一半:)