我偶然发现了一篇关于如何在 Gradle 中制作胖 jar 文件的文章。
jar {
from configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
}
我的问题是
Prop 1{
Prop 2{
prop3.prop4=5
}
}
相当于:prop1.prop2.prop3.prop4=5
我还找到了一篇关于 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/