Gradle-在多模块项目构建中复制所有已更改模块的jars

时间:2018-08-29 06:30:38

标签: java gradle

我有一个包含约100个模块的多模块版本。有没有办法只为更改的模块创建jar文件,然后将其复制到某个地方?

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

2 个答案:

答案 0 :(得分:0)

假设您正确设置了所有任务输入和输出,则gradle支持最新检查和开箱即用的任务。参见up to date checks (aka incremental build)

对于复制,可以使用Sync任务,该任务将仅复制(或删除)与目标目录不同的jar。

例如

task syncJars(type: Sync) {
    allprojects { p ->
        from p.tasks.withType(Jar)
    }
    into 'path/to/target/dir' 
} 

答案 1 :(得分:0)

因此,假设您所有的模块都是简单的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'
            }
        }
    }
}