【问题标题】:Why my dependency is printed twice?为什么我的依赖被打印了两次?
【发布时间】:2014-05-06 10:21:44
【问题描述】:

我有以下相当简单的build.gradle 构建脚本:

repositories {
  mavenCentral()
}

configurations { libs }

dependencies {
  libs 'org.hibernate:hibernate-core:4.3.5.Final'
}

configurations.libs.files { println it }

当我使用 gradlew build 运行它时(我正在使用 Gradle 1.12,目前最新)我得到以下信息:

DefaultExternalModuleDependency{group='org.hibernate', name='hibernate-core', version='4.3.5.Final', configuration='default'}
DefaultExternalModuleDependency{group='org.hibernate', name='hibernate-core', version='4.3.5.Final', configuration='default'}

这些似乎是相同的依赖项,但我不明白为什么当我只添加一个时会有两个。

有人知道为什么吗?我做错了什么吗?还是有什么我不明白的地方?

【问题讨论】:

    标签: gradle


    【解决方案1】:

    Configuration#files 方法需要一个 谓词。 (有关 API 的详细信息,请参阅 Gradle Build Language Reference 中的 Configuration。)如果您改为将包含 println 语句的闭包传递给它,(似乎)会发生奇怪的事情。您可能想要以下内容:

    // configurations should only be resolved in 
    // the execution phase, so let's declare a task
    task printLibs {
        doLast {
            configurations.libs.each { println it }
        }
    }
    

    【讨论】:

    • 好的,这是我做错的一部分:应该调用each。那两个依赖项呢?即使files 得到一个谓词,为什么它会应用于 2 个依赖项(看起来相同)?为什么要两个,我只有一个?
    • 这两者有什么区别,因为我看到打印的内容是相同的......
    • 它们不能完全相同。使用each,将打印文件路径而不是依赖对象,我怀疑你会得到两个路径。
    • 那么这意味着它们在某些方面有所不同......实际的区别是什么?
    • 打印配置的解析文件。另一个是不正确的 API 使用,将打印未定义数量的依赖对象。如果这不是您所看到的,可能是您没有正确复制我的代码,或者您看到的是其他代码的输出。
    猜你喜欢
    • 2022-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多