动态加载`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`存储库路径的主要内容,如果未能解决你的问题,请参考以下文章

mave 安装本地jar包到maven库

mave

有没有办法安装 jar 本地 gradle 存储库,就像它在 mave 中一样(maven install:install-file [duplicate]

gradle脚本中引入本地jar包

使用 ReactJS 动态加载本地图像

无法在反应js中动态加载本地文件