如何解决动态加载`buildscript`的本地`maven`存储库路径 解决方案 1 - 使用 Init Script 解决方案 2 - 使用 Gradle user properties
我试图为上述问题找到合适的解决方案,但到目前为止找不到出路,因此在此处发布以获取问题的正确和精确解决方案。
我在代码版本控制中包含了应用程序 build.gradle
,因为 build.gradle
中经常发生变化(在插件依赖级别)我需要在版本中跟踪此文件 - 长话短说。现在,作为每个团队成员对于以下指定依赖项都有不同的位置 - 我试图从我的 customLocalPaths.properties
加载它,但从 .properties
文件加载变量在这里似乎不起作用。下面列出的 url
属性似乎只接受纯字符串。
buildscript{
repositories{
google()
jcenter()
maven{
url 'D:\\android_workspace_dependencies\\My_XYZ_dependency\\lib' // <-- need to make this path dynamic
}
}
}
知道如何使 url
路径动态化(例如从变量加载它)而不是将其设为静态字符串。我过去常常无法解决路径类型的错误。
注意:.properties
文件工作正常。我在我的应用程序 .properties
中使用来自同一个 build.gradle
文件的其他变量,没有任何问题。我也尝试加载部分路径,即单个目录名称,但没有成功。
解决方法
首先,如果您想从本地 libs 目录解析依赖项,您应该使用 flat directory repository type 而不是 maven
存储库。
为了解决您的具体问题,这里至少有两个基于标准 Gradle 功能的简单解决方案:
解决方案 1 - 使用 Init Script
Init Script 功能允许您根据当前构建环境自定义 Gradle 执行。每个团队成员都可以在他们的本地 Init 脚本中声明他们特定的本地存储库,如下所示:
$USER_HOME/.gradle/init.gradle
allprojects {
buildscript {
repositories {
flatDir {
dirs "c:/DEV/libs"
}
// or with local mavel repo:
// maven { url "c:/DEV/libs" }
}
}
}
项目构建脚本将只包含公共/共享存储库
build.gradle
buildscript{
repositories{
google()
jcenter()
}
}
解决方案 2 - 使用 Gradle user properties
您可以使用 Gradle 属性来配置存储库 URL/路径,并让团队成员在其用户特定的 gradle.properties
文件中提供此属性值:
build.gradle
buildscript {
repositories {
google()
jcenter()
if (project.hasProperty("myLocalLibRepo")) {
flatDir {
dirs myLocalLibRepo
}
// or with local mavel repo:
// maven { url myLocalLibRepo }
}
}
}
团队成员的属性文件:
$USER_HOME/.gradle/gradle.properties
myLocalLibRepo=c:/DEV/libs
通常,在公司内部,您会为工件运行 Nexus 或 Artifactory 服务器。这是放置依赖项的地方,您不需要更多本地路径。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。