3

我有多个项目 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
4

6 回答 6

14

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

于 2013-11-16T02:19:34.590 回答
4

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

于 2017-04-26T19:10:47.300 回答
3

不幸的是,其他选择都没有为我解决。我使用以下方法成功引用了此文件中的变量。

project.getProperties().SPRING_VERSION

也许这会帮助别人。

于 2015-01-02T15:27:25.147 回答
1

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

project.SPRING_VERSION
于 2013-11-13T14:15:21.733 回答
0

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

${project.PROPERTY_NAME}

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

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

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

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

于 2020-06-05T13:41:39.750 回答
0

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

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

<parent>...</parent> 

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

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

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

gradle :subproject:anygradletask
于 2021-01-05T07:06:17.043 回答