2016-12-31 1 views
4

파일 build.gradle의이 스 니펫에서 처음으로 ${appengineVersion} (11 행)을 참조하면 오류가 발생합니다. 그러나 두 번째 참조 (27 행)는 잘 작동합니다. 왜 그런가요?왜이 문자열 교체/연결이 Gradle에서 작동하지 않습니까?

작동 시키려면 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

특정 오류 : "org.gradle.api.interna[email protected]6f9c2c4"에 'appengineVersion'속성을 찾을 수 없습니다. – CMerrill

답변

2

프로젝트 빌드 파일의 최상위 수준에서 vars를 선언한다고해서 모든 Gradle 블록에 표시되지는 않습니다. buildscript {}은 특수 스크립트의 다른 부분보다 먼저 평가됩니다. 당신은, 비록 buildscript에 선언을 이동할 수 있습니다 그것은 눈에 보이는 너무 다른 블록에해야한다 :

buildscript { 
    def appengineVersion = "1.9.48" 
    ... 

하지만

dependencies { 
    appengineSdk "com.google.appengine:appengine-java-sdk:" + appengineVersion 
+0

고마워요! 그 해결책의 절반은 :) – CMerrill

2

표준 Gradle을 연습처럼 사용할 필요하면 사용자 정의 속성을 선언하는 것입니다 ext 네임 스페이스에 있습니다.

ext.appengineVersion = "1.9.48" 
+0

고마워요! 그것은 솔루션의 절반이었습니다 :) – CMerrill

2

솔루션은 올렉과 분노의 답변의 조합이었다 : here

당신이해야 할 참조

이동합니다 buildscript 블록에 appengineVersion의 선언과 내선 네임 스페이스에 정의 .

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 개의 답을 수락 할 수 없으므로 직접 답변을하고 있습니다.

관련 문제