Java gradle WriteProperties任务不会创建属性文件,除非直接运行该任务

Java gradle WriteProperties任务不会创建属性文件,除非直接运行该任务,java,gradle,Java,Gradle,我试图在非Android Java项目中生成属性文件,但由于某种原因,即使在我使用/gradlew assembleList构建项目或使用/gradlew foo:run运行项目时任务运行,也不会创建属性文件。任务在子项目中定义,如下所示: task writeProperties(type: WriteProperties) { outputFile 'src/main/resources/foo.properties' property 'version', version

我试图在非Android Java项目中生成属性文件,但由于某种原因,即使在我使用
/gradlew assembleList
构建项目或使用
/gradlew foo:run
运行项目时任务运行,也不会创建属性文件。任务在子项目中定义,如下所示:

task writeProperties(type: WriteProperties) {
    outputFile 'src/main/resources/foo.properties'
    property 'version', version
    property 'releaseType', releaseType
    property 'date', date
    println("task ran")
}
当我执行其他gradle任务时,
task run
会被打印出来,这表明该任务已运行,但指定路径中没有显示任何
foo.properties
文件。奇怪的是,如果我直接使用
/gradlew foo:writeProperties
运行
writeProperties
任务,文件就会被创建并填充正确的变量

我尝试过用
doFirst{}
doLast{}
包装上面的语句,但出现如下错误:

Cause: path may not be null or empty string. path='null'
有人知道我做错了什么吗?我已经为此绞尽脑汁好几个小时了,现在已经没有主意了。谢谢

更新:我用接受的答案中提供的信息设法解决了这个问题。我必须添加
compileJava.finalizedBy(writeProperties)
,以使任务作为构建任务的一部分实际运行。正如上面提到的答案,
println
基本上是在骗我,因为它是在配置阶段打印的,但任务操作没有运行

  • 在生成文件夹中生成新代码(非主要源代码)
  • 将生成的文件添加到源集中
  • 将新任务链接到构建链

    代码的实际问题是,
    println
    语句没有说实话。任务配置闭包中的代码在配置任务时运行,而不是在执行任务时运行。因此,每次从命令行运行另一个任务时,您的任务都会被配置,并且
    println
    会写入命令行,但实际的任务操作不会执行。您应该将
    println
    打包到
    doLast
    中,以便在创建
    .properties
    文件后实际运行

    task myTask {
        println 'task configured'
        doLast {
            println 'task executed' 
        } 
    } 
    

    如果希望在不在命令行上指定的情况下运行任务,则需要使用
    dependsOn
    finalizedBy

    Hi-Algebro来设置任务依赖项,欢迎使用stackoverflow。我试过你的代码,它对我很有效。你能回答你的问题并提供一个答案吗?另请参阅。您的答案中有太多不必要的噪音,问题代码中的实际问题根本没有解释。谢谢您的解释。有没有办法指定项目的编译任务依赖于此任务?我需要将该属性文件写入jar并绑定到jar中,但我不知道如何将其设置为依赖项。如果希望结果文件出现在
    jar
    任务生成的jar文件中,只需将
    jar{from writeProperties}
    添加到
    build.gradle
    。Gradle将自动创建任务依赖项,以便在创建JAR文件时执行任务。此外,您不需要(也不应该)在
    src/main/resources
    中创建属性文件。源集(src下的所有内容)仅适用于源文件,不适用于生成的文件。生成的资源文件的建议路径在哪里?对于所有的初学者问题,我深表歉意——我对Java项目布局非常陌生,正在尝试学习以正确的方式进行操作。此外,将
    从writeProperties
    添加到
    jar{}
    会给我带来以下错误:
    评估项目时出现问题:foo'>无法获取任务的未知属性“writeProperties”:类型为org.gradle.api.tasks.bundling.jar的foo:jar
    
    task myTask {
        println 'task configured'
        doLast {
            println 'task executed' 
        } 
    }