gpt4 book ai didi

groovy - Gradle:创建一个在 “build”任务之后运行的任务

转载 作者:行者123 更新时间:2023-12-03 03:14:34 25 4
gpt4 key购买 nike

这似乎很简单,但是我尝试了无数在线示例,但它们都以不同的方式失败了,这意味着我可能还没有完全了解任务的工作方式(对不起,它仍然非常对我来说是新的)。

我想做的是:我有一个多项目gradle解决方案,其中有几个Java子项目。我想为每个子项目创建一个任务,该任务将:

  • 构建项目
  • 将生成的jar文件复制到其他文件
    目录

  • 据我所知(它可能只是缺少了一些小东西,或者可能是一种完全不正确的方法,我希望有人能向我解释):在我的 build.gradle根目录中,我已输入以下内容:
    subprojects{
    plugins.withType(JavaPlugin){ //create copyOutput task for all java projects
    tasks.create("copyOutput"){
    Path infile = Paths.get(buildDir.getCanonicalPath() + "/libs/" + project.name + ".jar")
    Path outfile = Paths.get(rootProject.projectDir.getCanonicalPath() + "/bin/" + project.name + ".jar")
    Files.copy(infile, outfile, REPLACE_EXISTING)
    }
    tasks['copyOutput'].dependsOn tasks['build'] //only run after build (doesn't work, runs immediately at configuration time)
    }
    }

    从我可以从堆栈跟踪中收集到的信息来看,这个问题是它在配置时立即执行 任务,并在每个时间执行 (不仅当我执行gradle copyOutput时,而且即使在我做类似gradle clean的事情。

    显然,我不了解任务创建和依赖项的工作方式。谁能澄清?

    最佳答案

    您需要添加一个操作(<<):

    subprojects{
    plugins.withType(JavaPlugin){ //create copyOutput task for all java projects
    tasks.create("copyOutput") << {
    Path infile = Paths.get(buildDir.getCanonicalPath() + "/libs/" + project.name + ".jar")
    Path outfile = Paths.get(rootProject.projectDir.getCanonicalPath() + "/bin/" + project.name + ".jar")
    Files.copy(infile, outfile, REPLACE_EXISTING)
    }
    tasks['copyOutput'].dependsOn tasks['build'] //only run after build (doesn't work, runs immediately at configuration time)
    }
    }

    关于groovy - Gradle:创建一个在 “build”任务之后运行的任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31448990/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com