gradle 压缩子项目分发文件的主要任务

标签 gradle

我有一个主要使用 java 插件的 gradle 项目。在 subproj1 - 到 subproj4 的 build.gradle 文件也使用应用程序插件。它在子项目中可以很好地编译 jars(使用主类)并创建分发 zipfile(使用资源和 dist 文件)。

现在我想构建一个“主”dist zip 文件,其中包含所有这些 subproj 内容的内容。我发现我可以运行 installDist 解压缩到每个子项目 build/install/subprojN

现在只在主要方面不知所措,有一个任务和/或依赖项来创建一个“主要”dist zip文件,其中包含:subproj1/** subproj2/** subproj3/** subproj4/**

我的想法是复制 from('.').include('subproj*/build/install// ')
然后拉上 zipper 。但还没有弄清楚如何仅在主级别添加任务,而且不要提示:NO SOURCE

提前致谢

最佳答案

这里举个例子,只用了两个子项目,没有展示main的编译代码。这些东西应该很容易添加。解决方案的关键是zipzipfileset通过 AntBuilder。

主要考虑这个 build.gradle :

task uberBuild(dependsOn: ['subProj1:build',
                           'subProj2:build']) {
    doLast {
        ant.mkdir(dir: "${projectDir}/dist")
        def PATH = "build/distributions"

        ant.zip(destfile: "${projectDir}/dist/uber.zip") {
            zipfileset(src: "${projectDir}/subProj1/${PATH}/subProj1.zip") 
            zipfileset(src: "${projectDir}/subProj2/${PATH}/subProj2.zip") 
        }
    }
}

这将写入 ~/dist/uber.zip , 内容如下:
$ jar tf dist/uber.zip 
subProj1/
subProj1/bin/
subProj1/lib/
subProj1/bin/subProj1
subProj1/bin/subProj1.bat
subProj1/lib/subProj1.jar
subProj2/
subProj2/bin/
subProj2/lib/
subProj2/bin/subProj2
subProj2/bin/subProj2.bat
subProj2/lib/subProj2.jar

关于gradle 压缩子项目分发文件的主要任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46696532/

相关文章:

gradle - 为什么 Gradle Copy 任务会对目标目录中的所有内容进行快照?

flutter - 如何在更大的项目中添加一个新的 flutter 项目作为 IntelliJ 模块

android - Gradle + Cmake 在连接路径时添加意外的引号

android - MaterialContainerTransform Unresolved reference

scala - 使用 Gradle 显示 Ant Scala 编译器错误

android - Wear App 和带有 applicationIdSuffix 的自定义构建类型

java - 如何从编译中排除某些文件

java - IntelliJ Idea 没有看到依赖,这是 Gradle 添加的

android - 为什么在用Cordova构建APK时出现此错误?

gradle 任务定义语法