首页 > 解决方案 > 无论如何要在构建任务中执行特定任务吗?

问题描述

我想在运行根项目的构建任务时将子模块存档文件复制到根项目构建目录中

task archive(type: Zip) {
    dependsOn copyWars

    archiveName = "${project.name}-${version}.zip"
    destinationDir = file('build/dist')
    from 'build/libs'
    exclude "*.zip"
    includeEmptyDirs = false
}

我已经尝试过build.dependsOn archivebuild.finalizedBy archive

我想要在运行根模块构建任务时包含子模块war文件的根模块zip文件。设 a,b 两个子模块,c 是根模块。所以c.zip应该包含a.war& b.war。但是没有c.zip创建文件。可能是我做错了方法。请任何人告诉我正确的道路。

标签: gradlebuild.gradle

解决方案


假设您有两个子项目war1war2产生war人工制品:根项目脚本中的以下配置应该可以工作:

build.gradle(根项目)

// copy war artifacts from sub-projects
task copyWars(type: Copy){
    into "build/libs"
    from project("war1").war
    from project("war2").war
}

// create archive with content from  'build/libs' directory
task archive(type: Zip) {
    dependsOn copyWars
    archiveName  = "${project.name}-${version}.zip"
    destinationDir  = file('build/dist')
    from 'build/libs'
    exclude "*.zip"
    includeEmptyDirs = false
}
// add 'archive' task to the main "build" lifecycle
build.dependsOn archive

您还可以简化并摆脱copyWars(如果此任务目的只是将战争从子项目复制到根项目):

task archive(type: Zip) {
    dependsOn copyWars
    archiveName  = "${project.name}-${version}.zip"
    destinationDir  = file('build/dist')
    from 'build/libs'
    from project("war1").war
    from project("war2").war        
    exclude "*.zip"
    includeEmptyDirs = false
}
build.dependsOn archive

推荐阅读