我正在尝试实现一个流程,以便当其他人需要处理该项目时它不会影响我的版本控制。
目前我有一个库模块从另一个项目添加到当前项目中。我是通过 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之前调用,我真的不确定确切的流程)。
我做错了什么吗?我想要实现的流程是正确的吗?做这样的事情的正确方法是什么?
我最终找到了解决问题的简单方法。我不知道这是最好的解决方案还是最优雅的,但这就是我实现我想要的目标的方式:
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 文件相同的文件夹中(通常是)。
除了上面的答案之外,这里还有从 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"))