1

我有两个模块 A 和 B。模块 A 是通用的,可以包含在许多不同的项目中。我通过以下方式配置了一个自定义依赖项:

build.gradle(模块 A)

configurations { providedCompile }

eclipse.classpath.plusConfigurations += configurations.providedCompile

sourceSets {
    main { compileClasspath += configurations.providedCompile }
    test { compileClasspath += configurations.providedCompile }
}

模块 A 对某些库(例如 com.test.gradle.C)有一个自定义的“providedCompile”依赖。像这样:

build.gradle(模块 A)

providedCompile "com.test.gradle.C:common-tests:${myTestsVersion}"

现在,在模块 B 中,我定义了对模块 A 的依赖。

build.gradle(模块 B)

compile project(':moduleA')

在模块 B(一个 Web 项目)中,我想使用不同版本的库 com.test.gradle.C,例如

compile "com.test.gradle.C:common-tests:${myTestsVersion}"

问题是,在 Eclipse 部分部署程序集中我可以看到模块 A 中的库。这是因为 .classpath 文件包含

<classpathentry ...>
    <attributes>
        <attribute .../>
    </attributes>
</classpathentry>

为了摆脱属性元素,我在 gradle 中编写了以下内容:

build.gradle(模块 A)

eclipse {

    classpath.file {
        // Classpath entry for Eclipse which changes the order of classpathentries; otherwise no sources for 3rd party jars are shown
        withXml { xml ->
            def node = xml.asNode()
            def provided = node.findAll { it.@path.contains('com.test.gradle.C') }

            provided.each{ dep ->
                dep.children().clear()
            }
        }
    }
}

这就是我解决问题的方法,但我认为必须有更好的方法。有人可以帮忙吗?

4

0 回答 0