来自configuration.compile.collect的Gradle命令

标签 gradle

我偶然发现了一篇关于如何在 Gradle 中制作胖 jar 文件的文章。

jar {
    from configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
}

我的问题是
  • jar 元素是什么?它是一种声明属性的方法。据我了解,我可以按如下方式定义属性:

    Prop 1{
    Prop 2{
    prop3.prop4=5
    }
    }

  • 相当于:prop1.prop2.prop3.prop4=5
  • from 语句:它是一种方法吗?我的意思是它来自(参数)。

  • 我还找到了一篇关于 ConfigurationContainer 的文章:https://gradle.org/docs/current/javadoc/org/gradle/api/artifacts/ConfigurationContainer.html .

    但是,我无法在此处链接信息以制作完整图片。

    最佳答案

  • jar 是一个任务名称。它与属性无关。 Tasks是每个 Gradle 构建的基本构建块。相当于 tasks.jar
  • from CopySpec 的一个方法类(class)。许多任务来自 CopySpec类并继承 from方法。
  • configurations.compile是对 compile 中定义的所有工件的引用。 configuration .

    .collect {} 是一个带有一个参数的方法调用,参数是 closure . {}是一个空的闭包。
    { it.isDirectory() ? it : zipTree(it) }是返回要包含在 JAR 中的文件集合的闭包(又名函数)。 it是每个闭包的默认参数,在这种情况下,将是来自 configurations.compile 的 JAR 工件实例或本地文件路径实例。它可能是一个文件路径,因为 configurations支持编译的 JARS 和本地文件系统路径 .class文件。

    闭包中的逻辑形式为<conditional> ? <A> : <B>并表示 if <conditional> then return <A> else return <B> .

    有条件的it.isDirectory()计算结果为 True如果it变量是一个目录。所以如果 it是我们返回的目录it .如果它不是目录,则代码假定它是 JAR。

    zipTree(it) 是一种从 JAR 中提取所有文件并将它们作为集合返回的方法。

    所有文件(目录或分解的 JARS)从闭包中返回,然后由 collect“组合”。成一个集合(例如 FileTree )。

    关于来自configuration.compile.collect的Gradle命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28421409/

    相关文章:

    linux - Gradle robolectric 项目适用于 OSX 计算机但不适用于 Linux

    android - 我用Android Studio生成的APK无法正常工作

    gradle - 从 ml-gradle "provider"项目模式启用可重用的 gradle 任务?

    android - 如何在 Android Studio 1.1.0 和 gradle 2.2.1 中使用 Robolectric 2.4

    gradle - 想法-如何在.gradle文件的下一行放置括号?

    java - 由于 AndroidManifest.xml,Android 热插拔无法正常工作

    android - Android Studio合并资源集

    android - Flutter - 无法获取 'https://google.bintray.com/exoplayer/com/google/android/gms/play-services-location/maven-metadata.xml'。收到状态码403

    java - 如何修复 "error: package android.support.v7.widget does not exist"问题?

    java - 两种配置编译gradle