如何用jar替换gradle模块依赖项?

时间:2013-10-31 07:58:50

标签: java gradle

我有一个多项目构建,一个或多个子项目依赖于已损坏的模块。我想用依赖于本地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 个答案:

答案 0 :(得分:4)

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

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

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

以上将排除所有模块的maven依赖项(适用于库等),在这种情况下,我们已经排除了Android支持库。然后我只是添加我自己的支持库(有几个bug修复)作为常规jar依赖。

答案 1 :(得分:1)

您可以通过添加本地存储库来执行此操作:

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 dir。 对于你的情况,应该将两个文件添加到repo / com / android / support / support-v4:

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

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

pom应该是一个有效的pom meta,其内容类似于(使用现有的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>

答案 2 :(得分:0)

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

答案 3 :(得分:0)

如果要在 kotlin gradle 构建文件中使用很棒的 solution from 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
}