2016-02-22 146 views
15

我有2个独立的应用程序(在一个项目中)需要2个独立的版本(sencha cmd)。我被要求创建一个gradle脚本来完成这两个应用程序的构建。Gradle - 从任务执行多个命令

我创建了一个任务来构建一个应用程序,但是我有麻烦使用相同的任务来构建第二个应用程序。

这是我到目前为止有:

task senchaCmdBuild (type: Exec) { 
    workingDir 'src/main/app/MYAPP' 
    commandLine 'cmd', 'c', 'sencha app build' 
} 

,这工作得很好。

当我添加以下2行以上任务:

workingDir 'src/main/app/MYOTHERAPP' 
commandLine 'cmd', 'c', 'sencha app build' 

第一命令将被忽略,并且只有第二命令执行。

那么反正我可以用一个任务执行两个命令?

+1

创建两个'Exec的'任务,并从主任务运行它们。 – RaGe

+1

我觉得必须有一个解决方案,你可以利用commandLine上的'&&'来执行多项任务。或者,您可以调用一个执行两者的shell脚本。 –

回答

28

您可以使用第二种方式在gradle上声明任务类型。

task senchaCmdBuild { 
    doLast { 
    exec { 
     workingDir 'src/main/app/MYAPP' 
     commandLine 'cmd', 'c', 'sencha app build' 
    } 
    exec { 
     workingDir 'src/main/app/MYOTHERAPP' 
     commandLine 'cmd', 'c', 'sencha app build' 
    } 
    } 
} 

你需要投入doLast exec方法,以便只在执行中执行流

+1

如果你在一个插件中这样做,你需要使用'project.exec'(以及'project.task')来调用正确的DSL方法。 – elias

+1

非常感谢,我一直在寻找这个好几天。 Drazul,你太超级 –

+0

有没有办法只运行第二个命令,如果第一个失败? –

3

无法为类型为Exec的任务配置(运行)多个命令。 commandLine它只是一个二传手 - 最后一个胜利。如果你需要运行多个命令,最好的办法是在评论中建议@RaGe执行多个任务,或者编写一个自定义任务并使用groovy的本机机制 - execute方法。

1

您还可以使用gradle这个方法,而不是创造虚构任务

task senchaBuild() { 
doLast { 
    senchaBuild_steps() 
} 
} 

void senchaBuild_steps() { 
exec { 
    workingDir 'src/main/app/MYAPP' 
    commandLine 'cmd', 'c', 'sencha app build' 
} 
exec { 
    workingDir 'src/main/app/MYOTHERAPP' 
    commandLine 'cmd', 'c', 'sencha app build' 
} 
} 
+0

太棒了,这让我的生活(构建:))更容易! – user3385242