2015-02-09 325 views
1

我偶然发现了一篇关于如何在Gradle中制作fat jar文件的文章。来自configurations.compile.collect的Gradle命令

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

我的问题是

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

    PROP1 { PROP2 { prop3.prop4 = 5 } }

这相当于:prop1.prop2.prop3.prop4 = 5

  1. from声明:它是一种方法吗?我的意思是它来自(params)。

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

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

回答

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

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

configurations.compile是将所有在compileconfiguration定义的伪影的基准。

.collect {}是一个方法调用,其中一个参数是closure{}是一个空的封闭。

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

封闭逻辑的形式是<conditional> ? <A> : <B>,意味着if <conditional> then return <A> else return <B>

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

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

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

+0

有关_jar_任务(和_from_方法)的更多信息,请检查:https://gradle.org/docs/current/dsl/org.gradle.api.tasks.bundling.Jar.html。 – roomsg 2015-02-10 19:10:13

+0

@Amnon您正在寻找什么类型的代码片段?问题提供了代码剪切,并询问每个部分代表什么。如果你对这段代码有不同的疑问,你可以打开一个新的问题,或者礼貌地询问答案评论中的细节。 – cmcginty 2017-08-11 06:22:59