【问题标题】:How to add dependency on a jar in Gradle while swaping internal library dependency如何在交换内部库依赖项时在 Gradle 中添加对 jar 的依赖项
【发布时间】:2015-10-06 14:37:21
【问题描述】:

我正在尝试向我的 Android 项目添加 jar 依赖项:

dependencies {
  compile files('<SOME_JAR>')
}

但是 jar 是用我不想包含的库依赖项打包的。相反,我想声明一个更新版本的库:

dependencies {
  compile '<NEW_VERSION_LIBRARY>'
  compile files('<SOME_JAR>') {
    exclude '<OLD_VERSION_LIBRARY>'
  }
}

是否有可能在 Gradle 中实现这样的目标?

【问题讨论】:

  • 您是说“SOME_JAR”jar 中包含一个或多个 jar 文件,您想排除这些文件吗?您不能使用依赖项排除来做到这一点。如果你只想使用新版本,那么只需声明新版本的依赖即可。
  • "SOME_JAR" 有一个静态库依赖;库的文件被复制到 jar 中,但是库的版本比我想要的要旧。我遇到的问题是,在运行时应用程序链接的是这个旧版本而不是新版本。我在 Gradle 中寻找解决方法,但似乎没有。

标签: gradle android-gradle-plugin


【解决方案1】:

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

configurations.all {
    resolutionStrategy.eachDependency { DependencyResolveDetails details ->
        if (details.requested.group == 'org.codehaus.groovy') {
            details.useVersion '2.4.5'
        }
    }
}

如果您只是不想加载特定的依赖项,因为您更喜欢使用其他东西,那么您需要这样的东西,它将排除 Apache Commons Logging 并替换 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'
}

【讨论】:

  • 但是如果依赖打包在jar中,似乎没有办法排除和替换,对吧?
  • @Julian 如果您的意思是排除包装在 jar 中的 ,那么是的,没办法。如果您将整个 jar 从另一个 jar 中拖出,那么可能有一种方法可以排除/替换依赖项。 Gradle 不支持类级别的依赖管理,只支持 jar 级别。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-05
相关资源
最近更新 更多