5

我有一个多项目构建,并且一个或多个子项目依赖于损坏的模块。我想用对本地 JAR 文件的依赖项替换模块依赖项。

我已经尝试了以下方法(我真的没想到会起作用),但除此之外,我有点不知所措:

configurations.all {
    resolutionStrategy {
        failOnVersionConflict()

        eachDependency { DependencyResolveDetails details ->
            if (details.requested.group == "com.android.support" && details.requested.name == "support-v4") {
                details.useTarget("lib/android-support-v4-fixed.jar")
            }
        }
    }
}

如何将子项目中的模块依赖项替换为对文件(即 JAR)的依赖项?

4

4 回答 4

12

最后,我浏览了很多文档,并且能够非常简单地实现我想要的。

configurations.all {
    exclude group: 'com.android.support', module: 'support-v4'
}

dependencies {
    compile files('libs/support-v4.jar')
}

以上将排除所有模块的 maven 依赖项(与库等一起工作正常),在这种情况下,我们排除了 Android 支持库。然后我简单地添加我自己的支持库(带有几个错误修复)作为常规 jar 依赖项。

于 2014-03-12T22:44:35.347 回答
3

您可以通过像这样添加本地存储库来做到这一点:

configure(allprojects) {
    repositories {                                                                                                         
      maven {
          url "../repo"  // this is relative to subproject, so assumes all subprojects are in the same folder
      }
      
      // ... other repositories

}

应该使用 mvn 文件夹结构将固定的 jar 放入 repo 目录。对于您的情况,应将两个文件添加到repo/com/android/support/support-v4/r6-fixed

support-v4-r6-fixed.jar
support-v4-r6-fixed.pom

注意:文件应该命名为这样<artifactId>-<version>.<ext>,并且应该与 pom.xml 中的值匹配。

pom 应该是一个有效的 pom 元数据,内容如下(使用现有的 pom 创建它以获取损坏的版本)

<?xml version="1.0" encoding="UTF-8"?>                                                                                                                                 
    <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <modelVersion>4.0.0</modelVersion>
      <groupId>com.android.support</groupId>
      <artifactId>support-v4</artifactId>
      <version>r6-fixed</version>
    </project>
于 2013-10-31T08:25:17.377 回答
0

创建一个 FlatDir 存储库并将您的 jar 放在那里。

于 2013-10-31T08:13:58.793 回答
0

如果您想在 kotlin gradle 构建文件中使用Roman Konoval 的出色解决方案,您需要将路径指定为 URI,例如:

configure(allprojects) {
  repositories {                                                                                                         
    maven {
      url = uri("../repo")  // this is relative to subproject, so assumes all subprojects are in the same folder
   }
  
   // ... other repositories
}
于 2021-02-12T11:28:32.167 回答