动态加载`buildscript`的本地`maven`存储库路径

时间:2021-04-16 03:27:31

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

我试图为上述问题找到合适的解决方案,但到目前为止找不到出路,因此在此处发布以获取问题的正确和精确解决方案。

我在代码版本控制中包含了应用程序 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 文件的其他变量,没有任何问题。我也尝试加载部分路径,即单个目录名称,但没有成功。

2 个答案:

答案 0 :(得分:2)

首先,如果您想从本地 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

答案 1 :(得分:0)

通常,在公司内部,您会为工件运行 Nexus 或 Artifactory 服务器。这是放置依赖项的地方,您不需要更多本地路径。