Gradle“setup”任务(pre-build / compile / jar)

时间:2013-12-22 15:17:01

标签: java groovy gradle

相对较新的java和gradle - 尝试做“正确”的事情。在构建我的应用程序之前(我添加了gradle“应用程序”插件)我想设置一些环境和系统的东西 - 例如,我想创建log /目录和log.txt文件。

所以我做的事情是:

task setup {
    println 'Setup task executing ...'

    File d = new File('log');
    d.mkdir();
    f = new File(d.getPath() + '/log.txt');
    f.createNewFile();
}

哪个有效 - 但是在运行&gt时我收到一堆stdout警告gradle setup

Setup task executing ...
Creating properties on demand (a.k.a. dynamic properties) has been deprecated and is scheduled to be removed in Gradle 2.0. Please read http://gradle.org/docs/current/dsl/org.gradle.api.plugins.ExtraPropertiesExtension.html for information on the replacement for dynamic properties.
Deprecated dynamic property: "f" on "task ':setup'", value: "log/log.txt".
:setup UP-TO-DATE

所以有一个问题:利用Gradle执行设置/安装任务的正确方法是什么? (这应该只在部署应用程序时执行一次)

1 个答案:

答案 0 :(得分:5)

啊,你正在混合任务configuration and execution。这样:

task foo {
    // Stuff
}

与此不同:

task foo << {
    // Stuff
}

在第一个中,“stuff”在配置时运行,导致您看到的警告(因为f在此阶段被解释为项目变量)。在第二个,它在执行时运行。

(Gradle很棒,但这种非常微妙的语法区别可能是许多真正的错误的来源!)


至于如何正确设置,当您使用应用程序插件时,您应该查看 Including other resources in the distribution

(您还应该考虑将目录创建逻辑移动到您的应用程序本身,理想情况下,您希望它对于删除日志目录的人来说是健壮的!)