如何在交换内部库依赖项时在Gradle中添加对jar的依赖项

如何在交换内部库依赖项时在Gradle中添加对jar的依赖项,gradle,android-gradle-plugin,Gradle,Android Gradle Plugin,我正在尝试将jar依赖项添加到我的Android项目中: dependencies { compile files('<SOME_JAR>') } 依赖项{ 编译文件(“”) } 但是这个jar打包了一个我不想包含的库依赖项。相反,我想声明库的更新版本: dependencies { compile '<NEW_VERSION_LIBRARY>' compile files('<SOME_JAR>') { exclude '<OL

我正在尝试将jar依赖项添加到我的Android项目中:

dependencies {
  compile files('<SOME_JAR>')
}
依赖项{
编译文件(“”)
}
但是这个jar打包了一个我不想包含的库依赖项。相反,我想声明库的更新版本:

dependencies {
  compile '<NEW_VERSION_LIBRARY>'
  compile files('<SOME_JAR>') {
    exclude '<OLD_VERSION_LIBRARY>'
  }
}
依赖项{
编译“”
编译文件(“”){
排除“”
}
}

在Gradle中是否可以实现类似的功能?

如果依赖项正在加载给定库的多个版本,并且您希望使用特定版本,那么您可以执行类似操作,这将始终使用Groovy 2.4.5:

configurations.all {
    resolutionStrategy.eachDependency { DependencyResolveDetails details ->
        if (details.requested.group == 'org.codehaus.groovy') {
            details.useVersion '2.4.5'
        }
    }
}
如果您只是不想加载某个特定的依赖项,因为您更喜欢使用其他依赖项,那么您需要这样的东西,它将排除Apache Commons日志,并替换SLF4J和Logback:

dependencies {
    compile ( "com.orientechnologies:orientdb-graphdb:2.0.7" ) { 
        exclude module:'commons-logging' 
    }
    compile 'org.slf4j:slf4j-api:1.7.12' 
    runtime 'org.slf4j:jcl-over-slf4j:1.7.12' 
    runtime 'ch.qos.logback:logback-classic:1.1.3'
}

您是说“SOME_JAR”JAR中有一个或多个打包的JAR文件,您想排除这些文件吗?依赖项排除不能做到这一点。如果您只想使用新版本,那么只需声明新版本的依赖关系。“SOME_JAR”具有静态库依赖关系;库的文件是在jar中复制的,但是库的版本比我想要的旧。我遇到的问题是,在运行时,应用程序链接的是这个旧版本,而不是新版本。我在Gradle中寻找解决方案,但似乎没有。但是如果依赖项打包在一个jar中,似乎没有办法排除和替换,对吗?@Julian如果你想排除打包在jar中的类,那么是的,没有办法。如果要从另一个jar中拖出整个jar,那么可能有一种方法可以排除/替换依赖项。Gradle不支持类级别的依赖关系管理,只支持jar级别的依赖关系管理。