Android Studio Gradle - settings.gradle 中的 local.properties 变量(路径)

问题描述 投票:0回答:2

我正在尝试实现一个流程,以便当其他人需要处理该项目时它不会影响我的版本控制。

目前我有一个库模块从另一个项目添加到当前项目中。我是通过 settings.gradle 文件完成的,如下所示:

include ':MainModule', ':ExternalModule'
project(':ExternalModule').projectDir = new File('C:\\Projects\\AnotherProject\\libraryModule')

我的问题是,如果我这样做,我会影响在该项目上工作的所有其他开发人员,并且每次有人推送到存储库时,该文件都会被更改。我想避免这种情况。

我正在考虑在 local.properties 中添加外部库模块的路径,该路径不会推送到存储库并由每个开发人员处理。我做了这样的事情:

include ':MainModule', ':ExternalModule'
project(':ExternalModule').projectDir = new File(getExternalModuleDir())

def getExternalModuleDir() {
    Properties properties = new Properties()
    properties.load(project.rootProject.file('local.properties').newDataInputStream())
    def externalModuleDir = properties.getProperty('module.dir', null)
    if (externalModuleDir == null)
        throw new GradleException("Module location not found. Define location with module.dir in the local.properties file!")

    return externalModuleDir 
}

但是我收到以下错误:

在设置“AwesomeProject”上找不到属性“项目”。

我认为这是因为settings.gradle无法访问local.properties(或者settings.gradle在local.properties之前调用,我真的不确定确切的流程)。

我做错了什么吗?我想要实现的流程是正确的吗?做这样的事情的正确方法是什么?

android properties gradle settings local
2个回答
4
投票

我最终找到了解决问题的简单方法。我不知道这是最好的解决方案还是最优雅的,但这就是我实现我想要的目标的方式:

def getExternalModuleDir() {
    Properties properties = new Properties()
    properties.load(new File(rootDir.absolutePath + "/local.properties").newDataInputStream())
    def externalModuleDir = properties.getProperty('module.dir', null)
    if (externalModuleDir == null) {
        throw new GradleException(
                ""Module location not found. Define location with module.dir in the local.properties file!")
    }
    return externalModuleDir 
}

local.properties 文件中,我设置了我的属性 module.dir:

module.dir=C:\\Projects\\AnotherProject\\libraryModule

唯一的限制是 local.properties 文件应始终位于与 settings.gradle 文件相同的文件夹中(通常是)。


0
投票

除了上面的答案之外,这里还有从 local.properties 文件中获取所需属性的 Kotlin 方法。

在 local.properties 文件中添加您的属性

module.dir=C:\\Projects\\AnotherProject\\libraryModule

然后在settings.gradle.kts中,定义一个函数。

fun getLocalProperty(key: String): String? {
    val props = Properties()
    props.load(File(rootDir.absolutePath + "/local.properties").inputStream())
    val property = props.getProperty(key, "")
    if (property.isNullOrEmpty()) {
       throw GradleException("No value found for the key: $key")
    }
    return property
}

并像这样使用它

project(':ExternalModule').projectDir = new File(getLocalProperty("module.dir"))
© www.soinside.com 2019 - 2024. All rights reserved.