当排除所有可传递依赖项时,Gradle排除self

当排除所有可传递依赖项时,Gradle排除self,gradle,eclipse-plugin,transitive-dependency,maven-publish,Gradle,Eclipse Plugin,Transitive Dependency,Maven Publish,我遇到了一个我无法解决的特殊问题,如果有任何帮助,我将不胜感激。 最初,我在Java项目中包含了一些jar依赖项作为纯工件依赖项。 如下所示: compile "com.example:projectA:1.0.0@jar" dependency("com.example:projectA:1.0.0") { exclude group: '*' } 到目前为止还不错。让我们把这个项目称为“A”。我已经在另一个Java项目B中包含了项目A,同样是gradle。我注意到,当在B

我遇到了一个我无法解决的特殊问题,如果有任何帮助,我将不胜感激。 最初,我在Java项目中包含了一些jar依赖项作为纯工件依赖项。 如下所示:

    compile "com.example:projectA:1.0.0@jar"
dependency("com.example:projectA:1.0.0") {
    exclude group: '*'
}
到目前为止还不错。让我们把这个项目称为“A”。我已经在另一个Java项目B中包含了项目A,同样是gradle。我注意到,当在B中使用maven publish时,使用maven publish发布的A并没有在pom文件中排除它的所有可传递依赖项

所以我开始使用传递标志:

dependency("com.example:projectA:1.0.0") {
    transitive = false
}
这确保了在项目B中,我在使用eclipse插件和gradle本身时排除了A的所有可传递DEP

但是发布的pom.xml中缺少排除的问题仍然存在。 然后,我发现这个问题在撰写本文时似乎已经解决,对于我的gradle版本:

因此,我尝试了以下方法:

    compile "com.example:projectA:1.0.0@jar"
dependency("com.example:projectA:1.0.0") {
    exclude group: '*'
}
pom文件现在正确地具有所需的可传递依赖项排除规则,符合:

build.gradle:

import org.apache.commons.dbcp.BasicDataSource;
public class Main {
    public static void main(String[] args) {
        System.out.println("Hello World");
        BasicDataSource ds = new BasicDataSource();
    }
}
version = '0.0.1'
group = 'com.example'

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'maven-publish'

repositories {
    mavenCentral()
}

dependencies {
    compile ('commons-dbcp:commons-dbcp:1.4')
    {
        transitive=false
    }
//  {
//      exclude group: '*'
//  }
} 

publishing {
    publications {
        mavenJava(MavenPublication) {
            from components.java
        }
    }
}

我想这可能是格雷德尔的一个错误。我使用命令行中的Gradle2.3和2.5测试了您的示例文件。如果我使用
transitive=false
,两个版本都可以很好地编译项目。切换到
排除组:'*'
语法会导致2.3版本中断。Gradle 2.5继续运行良好


简而言之,Gradle升级应该可以解决您的问题。

感谢@Peter Ledbrook让我研究其他版本。这个bug似乎是在Gradle2.4中被发现并修复的。 我想我挖得不够深。还有一点让人恼火的是2.3版本gradle发行说明中的“已知问题”部分没有提到这个bug

如前所述,gradle的一个简单升级就可以做到这一点