首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么分级任务没有按正确的顺序运行

为什么分级任务没有按正确的顺序运行
EN

Stack Overflow用户
提问于 2020-06-24 09:59:25
回答 1查看 486关注 0票数 0

我有两个子项目的java项目。像这样的结构

代码语言:javascript
复制
- project_root
  |- client
     |- src
     |- build.gradle
  |- server
     |- src
     |- build.gradle
  |- build.gradle

我只需要在根buiild.gradle中创建“部署”任务,接下来的操作如下:

清除所有subprojects

  • clean‘目标’文件夹

  • ,为从根

  • 中的所有子项目到文件夹‘’的所有subprojects
  • copy jars创建一个目标文件夹的归档文件。

我就是这么做的

根build.gradle:

代码语言:javascript
复制
allprojects {
    apply plugin: 'java'
    repositories {
        mavenCentral()
    }
}

task cleanTarget(type: Delete) {
    delete "target"
    delete "target.zip"
}

task cleanAll() {
    dependsOn cleanTarget
    dependsOn clean
    dependsOn subprojects.clean
}

task jarChilds() {
    dependsOn subprojects.jar
}

task copyFiles(type: Copy) {
    copy {
        from("client/build/libs/")
        into project.file('target')
    }
    copy {
        from("server/build/libs/")
        into project.file('target')
    }
}

task zipApp(type: Zip) {
    from 'target/'
    include '*'
    include '*/*'
    archiveName 'target.zip'
    destinationDir(project.rootDir)
}

task deploy{
    dependsOn cleanAll
    dependsOn jarChilds
    dependsOn copyFiles
    dependsOn zipApp
    jarChilds.shouldRunAfter cleanAll
    copyFiles.shouldRunAfter jarChilds
    zipApp.shouldRunAfter copyFiles
}

如果手动运行,每个任务都会正常运行,但如果我运行‘部署’文件夹‘目标’没有创建。下面是日志输出:

代码语言:javascript
复制
Executing task 'deploy'...

> Task :clean
> Task :cleanTarget
> Task :client:clean
> Task :server:clean
> Task :cleanAll
> Task :client:compileKotlin
> Task :client:compileJava
> Task :client:processResources
> Task :client:classes
> Task :client:inspectClassesForKotlinIC

> Task :client:jar
Client jar done

> Task :server:compileKotlin
> Task :server:compileJava
> Task :server:processResources
> Task :server:classes
> Task :server:inspectClassesForKotlinIC

> Task :server:jar
Server jar done

> Task :jarChilds
> Task :copyFiles NO-SOURCE
> Task :zipApp NO-SOURCE
> Task :deploy


BUILD SUCCESSFUL in 3s
14 actionable tasks: 14 executed
12:39:15: Task execution finished 'deploy'.

我看到错误“无源”,但文件夹'client/build/libs‘和'server/build/libs’存在并包含jars。我可以肯定,因为手动运行的任务'copyFiles‘创建文件夹’目标‘和复制所有文件。我看到的唯一可能的选项是在“jarChilds”之前运行“copyFiles”任务。但我不明白为什么。我错过了什么,为什么不起作用?

对不起,我的英语很差

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-24 13:39:23

任务copyFiles使用Project实例的copy方法,而不是配置实际任务。这就是为什么任务保持未配置的原因,并且一旦执行,就会报告没有要处理的文件(NO-SOURCE)。若要配置任务,请使用任务类型Copy的方法

代码语言:javascript
复制
task copyFiles(type: Copy) {
    from("client/build/libs/")
    from("server/build/libs/")
    into("target")
}

附加提示:您可能根本不需要任务copyFiles。相反,您可以只使用任务zipApp来收集文件:

代码语言:javascript
复制
task zipApp(type: Zip) {
    from subprojects.jar
    archiveName 'target.zip'
    destinationDir(project.rootDir)
}

通过将subprojectssubprojects任务放入from方法,Gradle甚至会自动添加任务依赖项,因此不需要使用dependsOn注册它们。

请查看以下简短完整的build.gradle文件:

代码语言:javascript
复制
subprojects {                    // using subprojects here, because your root project has no sources
    apply plugin: 'java'
    repositories {
        mavenCentral()
    }
}

task clean(type: Delete) {       // without the 'java' plugin, there is no automatic 'clean' task
    dependsOn subprojects.clean
    delete 'target.zip'
}

task zipApp(type: Zip) {
    mustRunAfter clean
    from subprojects.jar
    archiveName 'target.zip'
    destinationDir(project.rootDir)
}

task deploy {
    dependsOn clean
    dependsOn zipApp
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62552426

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档