Gradle共享依赖项版本问题

时间:2019-06-27 10:00:23

标签: java gradle

我对Gradle构建所采用的依赖关系版本有问题。我使用Gradle 4.6。

我有一个自己开发的库,该库带来了实用程序之王。我们称它为utils.jar。 我还开发了另一个库,用于与Web服务进行通信。我们称它为network.jar。 然后,我开发一个需要network.jar依赖项和utils.jar依赖项的项目。但是我需要一个utils.jar版本,该版本高于network.jar使用的版本。

My project 
 |
 |-> network.jar:v1
 |       |
 |       |
 |       -> utils.jar:v1
 |
 -> utils.jar:v2

这是网络库的build.gradle

dependencies {   
    compile "com.mycompany:utils:1"
}

这是我的项目的build.gradle

dependencies {   
    compile "com.mycompany:network:1" // pull utils.jar:1
    compile "com.mycompany:utils:2" // I need utils.jar:2 in my project
}

在我的项目中,当我尝试使用utils.jar的v2时,v2中引入的新方法不可用。在IntelliJ中,我可以在类路径中看到utils.jar v2,但是当我尝试使用com.mycompany.utils.CollectionUtils类时,它使用嵌入在network.jar库(v1)中的utils代码,而不是使用utils v2。

因此,当此依赖项导入到我的项目中时,我试图从network.jar中显式删除utils.jar(v1)。 build.gradle在我的项目中:

dependencies {   
    compile("com.mycompany:network:1") {
        exclude group: 'com.mycompany', module: 'utils' 
    }
    compile "com.mycompany:utils:2"
}

但是utils v1代码仍嵌入在network.jar代码中,这是代替v2使用的代码。

如何使Gradle理解我想要的是utils v2,而不是由network.jar提取的utils v1?

1 个答案:

答案 0 :(得分:0)

我发现了错误。我在Maven回购network.jar lib并将其发布为胖子。因此,utils.jar的代码始终嵌入在network.jar的代码中。

如果人们犯同样的错误,我会发布解决方案。

我从network.jar build.gradle文件中删除了它:

jar {
    // Remove that to not build a fat-jar in this case
    // from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } 

    manifest {
        attributes 'Implementation-Title': 'Utils',
            'Implementation-Version': version,
            'Created-By': 'Myself'
    }
}