con*_*ile 60 java dependencies gradle
我使用以下两个依赖项:
compile 'com.google.guava:guava:14.0.1'
compile 'com.google.guava:guava-gwt:14.0.1'
Run Code Online (Sandbox Code Playgroud)
两者必须是相同的版本才能正常工作.由于我的其他依赖项使用更高版本,因此Gradle为每个依赖项使用不同的版本.
我通过运行找到了这个gradle dependencies
:
compile - Compile classpath for source set 'main'.
+--- com.google.guava:guava:14.0.1 -> 17.0
+--- com.google.guava:guava-gwt:14.0.1
| +--- com.google.code.findbugs:jsr305:1.3.9
| \--- com.google.guava:guava:14.0.1 -> 17.0
Run Code Online (Sandbox Code Playgroud)
如何强制Gradle为这两个依赖项设置相同的版本?
cmc*_*nty 90
将此部分添加到dependencies.gradle文件中
configurations.all {
resolutionStrategy {
force 'com.google.guava:guava:14.0.1'
force 'com.google.guava:guava-gwt:14.0.1'
}
}
Run Code Online (Sandbox Code Playgroud)
Vya*_*ets 50
configurations.all {
resolutionStrategy {
eachDependency { DependencyResolveDetails details ->
if (details.requested.group == 'com.google.guava') {
details.useVersion "14.0.1"
}
}
}
}
dependencies {
compile 'com.google.guava:guava'
compile 'com.google.guava:guava-gwt'
}
Run Code Online (Sandbox Code Playgroud)
Pij*_*usn 34
我有一个类似的情况,其中一个依赖使用spring-web 4.2.4被破坏了.您必须强制所需的特定库版本.如另一条评论所述,它可能会导致兼容性问题,但有时是必要的.
强迫我发现的库版本的最小侵入方式是使用而不是使用
compile "org.springframework:spring-web:4.2.3.RELEASE"
Run Code Online (Sandbox Code Playgroud)
指定依赖配置为强制:
compile("org.springframework:spring-web:4.2.3.RELEASE"){
force = true
}
Run Code Online (Sandbox Code Playgroud)
当我需要暂时降级Spring版本(直到下一个版本)时,我使用它.
Klu*_*unk 13
您的一个依赖项是强制guava版本更新.使用gradle dependencies
以定位库驱逐你的版本.
您遇到的问题是,如果强制它使用14.0.1,则另一个库可能无法正常工作.你能不能只使用17.0版本作为依赖?
我不是在build.gradle中维护单个版本号,而是使用dependencies.gradle文件,该文件将具有版本号的映射并将其拉入build.gradle.这样我只需要维护单个番石榴版本.所以你的例子是:
dependencies.gradle
ext {
ver = [
guava: '14.0.1'
]
}
Run Code Online (Sandbox Code Playgroud)
然后在build.gradle文件中,您可以:
apply from: "dependencies.gradle"
dependencies {
compile group: 'com.google.guava', module: 'guava', version: ver.guava
compile group: 'com.google.guava', module: 'guava-gwt', version: ver.guava
}
Run Code Online (Sandbox Code Playgroud)
然后,当我想要移动到17.0时,我只需要更改dependencies.gradle.
我也是将传递依赖关系设置为false的明确粉丝
configurations.compile { transitive = false }
Run Code Online (Sandbox Code Playgroud)
这样,您在编译时就没有一些依赖关系被驱逐,尽管如果驱逐库不完全向后兼容,您可能在运行时遇到问题.让我们面对它,如果你正在编写代码,你应该知道你使用的库,你应该明确你的依赖.它可以保护您免受升级和搞砸的依赖.
Mah*_*zad 11
这是使用Gradle 7.1 测试的Kotlin DSL ( build.gradle.kts ) :
dependencies {
implementation("org.jsoup", "jsoup") {
version {
strictly("1.14.3")
}
}
}
Run Code Online (Sandbox Code Playgroud)
其他方式:
dependencies {
implementation("org.jsoup:jsoup") {
version {
strictly("1.14.+") // You can also use dynamic versions
}
}
}
Run Code Online (Sandbox Code Playgroud)
其他答案建议的另一种方法:
configurations.all {
resolutionStrategy {
force("org.jsoup:jsoup:1.14.3")
force("com.google.guava:guava-gwt:14.0.1")
}
}
Run Code Online (Sandbox Code Playgroud)
sen*_*982 10
另一种选择是使用依赖约束:https://docs.gradle.org/current/userguide/dependency_constraints.html
dependencies {
implementation 'org.apache.httpcomponents:httpclient'
constraints {
implementation('org.apache.httpcomponents:httpclient:4.5.3') {
because 'previous versions have a bug impacting this application'
}
implementation('commons-codec:commons-codec:1.11') {
because 'version 1.9 pulled from httpclient has bugs affecting this application'
}
}
}
Run Code Online (Sandbox Code Playgroud)
我建议不要设置transitive = false
,因为这种方法会迫使您自己手动解析依赖关系树。
您可以通过强制使用所需的番石榴版本configurations.all
,或者显式添加依赖项并设置它forced = true
。
这里的例子:http ://www.devsbedevin.net/android-understanding-gradle-dependency-and-resolving-conflicts/
归档时间: |
|
查看次数: |
70505 次 |
最近记录: |