2016-11-23 91 views
0

我有一个build.gradle文件看起来像这样Gradle jar任务执行wsclean任务,为什么?

task wsimport{ 
    .... 
} 

task wsclean { 
    delete "${destDir.path}/com" 
} 

compileJava.source = ["${projectDir}/src/main/java", "${projectDir}/src/main/generated"] 

wsimport任务生成是从wsdl文件需要一些java文件。这一代需要一段时间,所以我不希望每次构建jar或编译程序时都执行它。

wsclean任务旨在用于wsdl更改时。

首先我运行wsimport任务并确认文件生成正确,它们是!

但是现在当我运行gradle jar时,生成的文件被删除。为什么?

当我注释掉wsclean任务时,jar任务成功继续。为什么叫gradle wsclean

注:我死了肯定我没有明确创建jar.dependsOn wsclean

有一种说法我持有的是jar执行任务*clean任务。如果是这样,我如何防止它发生?

+1

发布一个复制问题的完整示例。我的猜测是它配置** wsclean任务,但不执行**它。即您可能会将清洁代码放入任务的配置中,而不是执行。 –

+0

@JBNizet我没有试图执行它,我试图不执行它 –

+0

我明白这一点。我所说的是,这个错误很可能是隐藏在wsclean任务中的'.....'中。无论您开始的任务如何,配置代码都会执行。执行代码仅在任务是图的一部分时执行。但由于我们对这项任务一无所知,因此我们无法分辨。 –

回答

1

而不是

task wsclean { 
    delete "${destDir.path}/com" 
} 

你需要

task wsclean << { 
    delete "${destDir.path}/com" 
} 

task wsclean { 
    doLast { 
    delete "${destDir.path}/com" 
    } 
} 

否则,将删除作为配置阶段,其中发生在每一个构建的一部分执行的,不管任务发起。请参阅https://docs.gradle.org/current/userguide/build_lifecycle.html

+0

我现在了解评论! –