当前位置: 首页 > 知识库问答 >
问题:

Gradle任务执行的是配置阶段,而不是执行阶段

东郭鹤龄
2023-03-14

我有一个Gradle任务,简单地将文件从一个文件夹复制到另一个文件夹。

当在配置阶段调用copy'from''into'方法时,它可以工作,但当在执行阶段调用它们时,它就不工作了。

这样做是有效的

task copyServerConfig(type:Copy)  {  
    from "${projectDir}" + File.separator + 'server_config'  
    into localServer  
}  
:copyServerConfig  

BUILD SUCCESSFUL  

Total time: 0.686 secs  
task copyServerConfig(type:Copy) << {  
    from "${projectDir}" + File.separator + 'server_config'  
    into localServer  
}  

gradle copyServerConfig

:copyServerConfig UP-TO-DATE  

BUILD SUCCESSFUL  

Total time: 0.654 secs  

如果我把它放在doFirst{}块中,也会发生同样的事情。

我不明白的另一件事是:

task task1(type:Exec) << {  
     commandLine 'echo', ' TEST'   
}  

gradle task1

:task1 FAILED  

FAILURE: Build failed with an exception.

What went wrong:  
Execution failed for task ':task1'.  
execCommand == null!

但如果我改成这样:

task task1(type:Exec) {  
     commandLine 'echo', ' TEST'   
}  

gradle task1

:task1  
 TEST  

BUILD SUCCESSFUL  

Total time: 0.655 secs  

共有1个答案

仰英发
2023-03-14

第一个变体是声明复制任务的正确方式

task copyServerConfig(type:Copy)  {  
    from "${projectDir}" + File.separator + 'server_config'  
    into localServer  
}

这里您说“这是一个类型为copy的任务,名称为copyserverconfig,这是fromparam,这是intoparam”。方括号内的代码用于配置任务。

<<运算符将doafter闭包添加到任务中,并在任务之后执行。

task copyServerConfig(type:Copy) << {  
    from "${projectDir}" + File.separator + 'server_config'  
    into localServer  
} 

此声明表示“创建空(未配置copy任务,并在完成后执行这两行。这里没有配置任务,它什么也不做,并且总是最新的doafter闭包中的两行也什么也不做,因为它们与copy任务无关,所以frominto关键字没有作用。

类似的情况也发生在exec任务中

task task1(type:Exec) << {  
     commandLine 'echo', ' TEST'   
} 

这里有一个空的Exec任务,因为没有配置它而失败。

 类似资料:
  • 我目前正在学习Gradle。 但是我发现,当我在命令行运行时,复制不会发生。只有当显式执行任务时(即通过在命令行运行)才会发生复制。所以上面的代码实际上行为与 我对配置阶段和配置闭包的理解是否不正确?还是我漏掉了一些信息?

  • 我有在Gradle的执行阶段创建和执行任务的需求。 目前,在构建任务期间,我确定并创建了多个添加到taskContainer的任务,使用: 在第一次执行时,我得到以下错误: >任务工件状态缓存(.../.gradle/1.5/taskartifacts)尚未被锁定。 我做错了什么,有没有更好的方法在执行过程中动态添加任务?

  • https://docs.gradle.org/current/userguide/custom_tasks.html 如何使此任务在执行阶段运行?正在传递一个空闭包 唯一的解决办法? 但是hello任务似乎是在构建的配置阶段调用的。

  • OpenResty 处理一个请求,它的处理流程请参考下图(从 Request start 开始): 我们在这里做个测试,示例代码如下: location /mixed { set_by_lua_block $a { ngx.log(ngx.ERR, "set_by_lua*") } rewrite_by_lua_block { ngx.log

  • Openresty是什么? 重申一下Openresty是什么?截一张Openresty官网,春哥对Openresty的一个官方说明如下图: 我的理解Openresty = Nginx + ngxhttp_lua_module + lua_resty*;它是一个原生Nginx合上一个HTTP_LUA模块,在加上一系列Lua_resty模块组成的一个Ngx_Lua高性能服务生态。 Openresty处

  • 我是格雷德尔的新手。我正在尝试使用一个插件,但我想在执行过程中更改插件的默认值 我希望在执行过程中使用project.version中存在的版本值。但看起来该值是在执行任何任务之前设置的。有什么想法吗?