2015-10-06 35 views
1

我想JAR依赖添加到我的Android项目:如何添加依赖于一个罐子在摇篮而swaping内部库的依赖

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

但罐子包装与库依赖我不不想包含。相反,我想宣布一个较新版本的库:

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

是否有可能在Gradle中实现类似这样的事情?

+0

你说“SOME_JAR”jar有一个或多个jar文件打包wi瘦它,你想排除?你不能用依赖排除来做到这一点。如果你只是想使用新版本,那么只需声明新版本的依赖关系即可。 –

+0

“SOME_JAR”具有静态库依赖性;库中的文件被复制到jar中,但是库的版本比我想要的要旧。我遇到的问题是,在运行时,应用程序将链接到此旧版本而不是较新版本。我在寻找Gradle的解决方法,但似乎没有一个。 – Julian

回答

1

如果你的依赖加载指定库的多个版本,并且要使用特定的版本,那么你可以做这样的事情,这将永远使用Groovy 2.4.5:

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

如果你只是想从加载特定的依赖不断,因为你更愿意使用别的东西,那么你想这样的事情,这将排除在Apache共享日志记录和替代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' 
} 
+0

但似乎没有办法排除和替换,如果依赖包装在一个罐子里,对吗? – Julian

+0

@Julian如果你的意思是排除jar包中的* classes *,那么是的,没办法。如果您将整个jar从另一个jar中拖出,那么可能有一种排除/替换依赖关系的方法。 Gradle不支持在类级别进行依赖关系管理,只能在jar级别进行。 –