2015-11-23 4 views
1

У меня есть простой Gradle проект, который имеет следующую структуру:Свойство не найдено в Gradle подпроекта

root 
| 
sampleapp 
| | 
| build.gradle 
| 
build.gradle 
settings.gradle 
gradle.properties 

В моем корне build.gradle у меня есть следующие закрытия:

subprojects { 
    ext { 
    flag = true 
    } 
    afterEvaluate { subproj -> 
    if(subproj.ext.flag) { 
     sampleProp = [ 
      prop1: "abc", 
      prop2: "def" 
     ] 
    } 
    } 
} 

Когда я запускаю мой Gradle В проекте «sampleapp» используется структура sampleProp, но я получаю следующее исключение:

Could not find property 'sampleProp' on org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandl[email protected] 

Что-нибудь очевидное, что я делаю неправильно?

+0

Вы ожидаете sampleProp быть собственностью подпроектов или rootproject? – RaGe

ответ

0

Предполагая, что вы пытаетесь добавить sampleProp как свойство подпроекта, следующий будет работать:

корня проекта build.gradle:

subprojects { 
    ext { 
     flag = true 
    } 

// This property will be available both at config and exec phases from subproject 
    if (ext.flag) { 
     println 'yes' 
     ext.configPhaseProp = [ 
       prop1: "defined in root build.gradle", 
       prop2: "config" 
     ] 
    } 

// This property will be be available **only** in exec phase 
    afterEvaluate { subproj -> 
     if (subproj.ext.flag) { 
      subproj.ext.execPhaseProp = [ 
        prop1: "defined in root build.gradle", 
        prop2: "exec" 
      ] 
     } 
    } 

    task HelloFromRoot<<{ 
     println "######## RootHello" 
     println flag 
     println "RootHello: $configPhaseProp.prop1 :: $configPhaseProp.prop2" 
     println "RootHello: $execPhaseProp.prop1 :: $execPhaseProp.prop2" 
    } 
} 

подпроект build.gradle:

println '########## ConfigTime' 
println flag 
println "Config: $configPhaseProp.prop1 :: $configPhaseProp.prop2" 
//println "Config: $execPhaseProp.prop1 :: $execPhaseProp.prop2" 
//^^ Uncommenting this line will cause a "Could not find property error" 

task SubHello << { 
    println '########## SubHello' 
    println flag 
    println "SubHello: $configPhaseProp.prop1 :: $configPhaseProp.prop2" 
    println "SubHello: $execPhaseProp.prop1 :: $execPhaseProp.prop2" 
} 

выполнить задачу HelloFromRoot:

########## ConfigTime 
true 
Config: defined in root build.gradle :: config 
:SubProject1:HelloFromRoot 
######## RootHello 
true 
RootHello: defined in root build.gradle :: config 
RootHello: defined in root build.gradle :: exec 

запустить SubHello задача:

########## ConfigTime 
true 
Config: defined in root build.gradle :: config 
:SubProject1:SubHello 
########## SubHello 
true 
SubHello: defined in root build.gradle :: config 
SubHello: defined in root build.gradle :: exec 
+0

, который работает, когда задача определена в разделе подпроектов корня, но я должен использовать эти свойства в самом подпроекте build.gradle. когда я ссылаюсь на sampleProp1.prop1 из child build.gradle, я получаю сообщение об ошибке во время оценки – 75inchpianist

+0

Я могу получить доступ к sampleProp1.prop1 из задач подпроекта build.gradle. Добавление подпроекта build.gradle и вывод к моему ответу. Вы пытаетесь получить к нему доступ на этапе конфигурации? – RaGe

+0

Я пытаюсь получить к нему доступ в разделе зависимостей дочернего проекта – 75inchpianist

Смежные вопросы