首页 > 解决方案 > Gradle - 复制多模块项目构建中所有更改模块的 jar

问题描述

我有一个包含大约 100 个模块的多模块构建。有没有办法只为更改的模块创建 jar 文件并将它们复制到某个地方?

该任务应该是一个独立的任务,无需修改现有的 jar 任务

标签: javagradle

解决方案


所以,假设你所有的模块都是简单的java模块,你所有的模块都会有一个jar任务(类型Jar)来构建相应模块的 JAR 文件。由于 Gradle 增量构建功能,每个jar任务只会在内容以任何方式更改(例如编译新文件)时执行。

您可以简单地doLast为这些任务中的每一个添加一个闭包,它将创建的文件复制到您的目录,因为只有当且仅当任务执行时,才会执行闭包:

单个任务的示例:

jar {
    doLast {
        project.copy {
            from archivePath
            into 'path/to/my/location'
        }
    }
}

如果这适用于单个模块,我们可以尝试与 @lance-java 类似的方法:

allprojects { project ->
    project.tasks.withType(Jar).all { jar ->
        jar.doLast {
            project.copy {
                from jar.archivePath
                into 'path/to/my/location'
            }
        }
    }
}

推荐阅读