【问题标题】:How to exclude dependencies of other subproject in Gradle build?如何在 Gradle 构建中排除其他子项目的依赖关系?
【发布时间】:2015-08-28 11:38:41
【问题描述】:

我正在开发一个子项目,它是大型多项目 Gradle 构建的一部分。我需要来自这些其他子项目的一些 Java 类,但我不需要它们拖入的任何依赖项,因为我使用的一些库需要不同版本的这些。

我最初将需要的子项目配置为

compile project(':other_needed_sub_project')

但是在这种情况下,gradle eclipse 任务将项目添加到项目树中。它们的依赖项出现在类路径上,导致我的应用程序选择了错误的版本。在 Eclipse 中,包含的项目似乎优先于指定的库。

作为一个可行的解决方案,我目前使用现有的 Maven 构建构建所需子项目的 jar,然后使用

compile files('../other_needed_sub_project/target/dist/other_needed_sub_project.jar')

这正是我需要的——没有附加库。然而,这意味着我必须在使用 Gradle 构建子项目之前运行不同的构建。

Gradle 能否构建所需的子项目,然后只在我的 Eclipse 配置中添加对它们最终 jar 的引用?

【问题讨论】:

  • 这被认为是 gradle eclipse 任务的错误行为。该行为已在即将发布的 2.5 gradle 版本中得到修复。您可能想尝试一下最新的 gradle nightly build。此外,您可以在此处找到更改的完整说明:github.com/gradle/gradle/commit/…

标签: java eclipse gradle dependencies dependency-management


【解决方案1】:

您可以排除依赖项的所有传递依赖项:

compile('groupId:artifactId:version') {
    transitive = false
}

或者你可以,但我当然不建议这样手动排除所有依赖项:

compile('groupId:artifactId:version') {
    exclude module: 'groupId:artifactId:version'
    ...
}

【讨论】:

  • 但这不适用于编译项目(..)这是一个答案吗?
  • @vach 你需要一组额外的括号:compile (project (':other_needed_subproject')) { transitive = false }
【解决方案2】:

你可以从依赖中排除一个模块

dependencies { 
    implementation (project(":sub_project")) {
        exclude group: 'grp1', module: 'mdl1'
        exclude group: 'grp2'
        exclude module: 'mdl2'
    }
}

【讨论】:

    猜你喜欢
    • 2014-09-22
    • 2015-11-30
    • 2016-02-28
    • 2014-03-08
    • 2021-08-15
    • 2013-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多