我有多个项目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
感谢您的帮助
瓦特
答案 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