【问题标题】:Loading local `maven` repository path for `buildscript` dynamically动态加载`buildscript`的本地`maven`存储库路径
【发布时间】: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 文件的其他变量,没有任何问题。我还尝试加载部分路径,即单个目录名称,但徒劳无功。

【问题讨论】:

  • 仍在等待特定于已发布问题的答案,可能来自文档参考,无论这是否可能。
  • 我认为下面描述的解决方案应该有效。请检查
  • 很高兴尝试您的解决方案,虽然没有尝试过 - 但我希望这会奏效。验证后(在接下来的几天内)我会将其标记为已接受。

标签: maven android-studio gradle build.gradle properties-file


【解决方案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”他们都有免费版本。
    • 仍在等待特定于已发布问题的答案,可能来自文档参考,无论这是否可能。
    猜你喜欢
    • 1970-01-01
    • 2010-12-13
    • 2014-08-17
    • 2014-08-22
    • 1970-01-01
    • 2017-12-20
    • 2019-05-02
    • 2012-01-26
    • 2017-07-31
    相关资源
    最近更新 更多