2016-12-15 98 views
2

有没有办法重用里面init.gradle?摇篮启动脚本块属性

def REPO_URL = 'myRepoUrl' 

initscript { 
    repositories { 
     maven { 
      url REPO_URL 
     } 
    } 
    dependencies { 
     classpath 'some dependency' 
    } 
} 

这给了我未知属性错误定制initscript块外部属性。我也尝试过使用外部{}像这样

ext { 
    REPO_URL = 'myRepoUrl' 
} 

与相同的错误。然而,它在所有其他配置块中都可以工作,即使在init.gradle之内也是如此。这迫使我复制initscript块的属性和其余配置。

经过多一点检查后,它看起来完全失去了对周围范围的任何引用。我甚至不明白为什么从Groovy的角度来看它的行为方式。

回答

1

我认为这个问题是一个鸡与蛋的事情。

要执行init脚本,您需要在initscript块中声明的依赖关系。但是,您尝试使用仅在执行初始化脚本期间存在的内容。

所以我会说你想要的是不可能的。您必须在initscript区块内外声明至少两次。所以,你可以得到可能是最好的是:

def REPO_URL = 'myRepoUrl' 

initscript { 
    def REPO_URL = 'myRepoUrl' 
    repositories { 
     maven { 
      url REPO_URL 
     } 
    } 
    dependencies { 
     classpath 'some dependency' 
    } 
} 
+0

那么这是否意味着Gradle以某种方式编译并执行initscript方法而不执行周边范围?我对Gradle和Groovy相当陌生,并不知道这是可能的。 –

+0

您可以在Groovy编译过程中使用标准编译器进行编译,然后转换Groovy脚本。在这种情况下,其中一种转换应该是在脚本的其余部分之前提取并评估'initscript'块,因为脚本的其余部分需要在该块的类路径中声明的相关性以执行,否则您将获得编译错误,因为依赖关系不在类路径中。正如我所说,鸡蛋和鸡蛋。 :-) – Vampire

+0

为了防止同事问我为什么要复制这段代码,请链接到评论中。 –

1

在你GRADLE_HOME或PROJECT_HOME你可以有2个文件。

gradle.properties房产

init.gradle用于初始化脚本

在gradle.properties您可以添加PARAMS

REPO_URL=myRepoUrl 

然后在init.gradle可以使用它:

repositories { 
     maven { 
      url REPO_URL 
     } 
    } 
+0

gradle.properties可以进入$ USER_HOME/.gradle吗? –

+1

是的,gradle.properties可以放在project_home或user_home – marok