来自configuration.compile.collect的Gradle命令

Tro*_*ang 6 gradle

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

jar {
    from configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是

  1. jar元素是什么?这是一种声明属性的方法。据我了解,我可以如下定义属性:

    prop1 {prop2 {prop3.prop4 = 5}}

等效于:prop1.prop2.prop3.prop4 = 5

  1. from语句:是一种方法吗?我的意思是来自(参数)。

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

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

cmc*_*nty 12

  1. jar是任务名称。它与属性无关。任务是每个Gradle构建的基本构建块。相当于tasks.jar

  2. fromCopySpec该类的一种方法。许多任务从CopySpec类扩展并继承from方法。

configurations.compile是对compile 配置中定义的所有工件的引用。

.collect {}是一个方法调用,它的一个参数是一个闭包{}是一个空的闭包。

{ it.isDirectory() ? it : zipTree(it) }是闭包(即函数),它返回要包含在JAR中的文件的集合。it是每个闭包的默认参数,在这种情况下,它将是来自的JAR工件实例configurations.compile或本地文件路径实例。它可能是文件路径,因为它同时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)。