有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java梯度“设置”任务(预构建/编译/jar)

对java和gradle来说相对较新——尝试做“正确”的事情。在构建我的应用程序之前(我添加了gradle“application”插件),我想设置一些环境和系统的东西——例如,我想创建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();
}

这是可行的——但我在运行时会收到一堆标准警告>;梯度设置

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) 个答案

  1. # 1 楼答案

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

    task foo {
        // Stuff
    }
    

    与此不同:

    task foo << {
        // Stuff
    }
    

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

    (Gradle很棒,但这种非常微妙的语法差异可能是许多令人恼火的bug的根源!)


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

    (你也应该考虑将目录创建逻辑移到你的应用程序本身中,作为理想的,你希望它对删除日志目录的人来说是健壮的)!