动态加载`buildscript`的本地`maven`存储库路径
Posted
技术标签:
【中文标题】动态加载`buildscript`的本地`maven`存储库路径【英文标题】:Loading local `maven` repository path for `buildscript` dynamically 【发布时间】:2021-07-11 02:15:42 【问题描述】:我试图为提到的问题找到一个合适的解决方案,但到目前为止找不到出路,因此在此处发布以获取该问题的一些正确和精确的解决方案。
我已将应用程序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
文件可以正常工作。我在我的应用程序build.gradle
中使用来自同一.properties
文件的其他变量,没有任何问题。我还尝试加载部分路径,即单个目录名称,但徒劳无功。
【问题讨论】:
仍在等待特定于已发布问题的答案,可能来自文档参考,无论这是否可能。 我认为下面描述的解决方案应该有效。请检查 很高兴尝试您的解决方案,虽然没有尝试过 - 但我希望这会奏效。验证后(在接下来的几天内)我会将其标记为已接受。 【参考方案1】:首先,如果要从本地 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
【讨论】:
【参考方案2】:通常,您在公司内部为工件运行 Nexus 或 Artifactory 服务器。这是放置依赖项的地方,您不再需要本地路径。
【讨论】:
您能否参考一些教程如何设置工件服务器(Ubuntu)。此外,如果您知道如何临时解决动态路径问题,那就太好了。 谷歌“sonatype nexus”或“jfrog artifactory”他们都有免费版本。 仍在等待特定于已发布问题的答案,可能来自文档参考,无论这是否可能。以上是关于动态加载`buildscript`的本地`maven`存储库路径的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法安装 jar 本地 gradle 存储库,就像它在 mave 中一样(maven install:install-file [duplicate]