Gradle构建在父gradle.properties文件中找不到属性

时间:2013-11-13 13:03:49

标签: gradle build.gradle

我有多个项目gradle构建,我试图通过gradle.properties外化依赖项版本。不幸的是,子项目无法在父gradle.properties中找到属性

所以在父gradle.properties我有:

SPRING_VERSION=3.2.0.RELEASE

在父build.gradle中我有

dependencies {
    compile "org.springframework:spring-webmvc:$SPRING_VERSION"
    ...

这很好用。但在子项目中同样的事情会导致错误:

Could not resolve all dependencies for configuration 
Could not find org.springframework:spring-context-support:$SPRING_VERSION.

如果我硬编码版本项目构建正常。

也在父文件中我有settings.gradle,它指定:

include 'projectA','projectB','projectC'

项目结构

root
|
\ buildSRC
\ projectA
    |
    \ build.gradle
\ projectB  (build script in parent build.gradle)
\ projectC  (build script in parent build.gradle)
|
|
\ build.gradle
\ gradle.properties
\ settings.gradle

感谢您的帮助

瓦特

6 个答案:

答案 0 :(得分:6)

在Groovy中,双引号字符串支持字符串插值,而单引号字符串则不支持。显然,您错误地在子项目中使用了单引号字符串。结果,Gradle开始搜索一个名为$SPRING_VERSION的版本,当然它没有找到。

答案 1 :(得分:3)

不幸的是,其他选项都没有为我效劳。我使用以下内容成功引用了此文件中的变量。

project.getProperties().SPRING_VERSION

也许这会帮助别人。

答案 2 :(得分:1)

验证您的子项目中是否有settings.gradle,如果有,请删除。

答案 3 :(得分:0)

在projectA-build.gradle中,您应该使用以下代码引用main gradle.properties中的变量:

project.SPRING_VERSION

答案 4 :(得分:0)

您可以通过以下方式引用根项目 gradle.properties 文件内容:

${project.PROPERTY_NAME}

我的意思是,对于您的示例,它应该是:

dependencies {
    compile "org.springframework:spring-webmvc:${project.SPRING_VERSION}"
    ...

也不要忘记使用双引号而不是单引号。

(我知道这是一篇旧文章,但我想它可以帮助正在寻找解决方案的人)

答案 5 :(得分:0)

我遇到了类似的问题。如果项目是从父目录构建的。 gradle 会找到 gradle.properties。但是如果你从子项目发出 build 命令,gradle 进程从那个位置开始,所以它无法知道根项目中定义的公共属性。

gradle 构建配置没有类似于 maven 的东西

<parent>...</parent> 

元素。所以它无法读取属性。

所以我认为最好的方法是,如果您想构建所有项目,请从根项目位置发出 gradle 任务。

如果您想构建特定的子项目,请从父位置发出如下所示的内容。

gradle :subproject:anygradletask
相关问题