【问题标题】:Gradle : Task dependency tree ignored?Gradle:忽略任务依赖树?
【发布时间】:2014-09-08 08:45:48
【问题描述】:

我对 gradle 的任务依赖有疑问。

我有一个 version.properties 文件,必须清除(在 clean 任务上)或用版本信息填充(在 war 任务上)。

因此我设置了这个依赖:

clean.dependsOn clearVersionProperties

processResources.dependsOn ([defaultValues,infoEnv])
compileJsps.dependsOn(classes, tomcatJasper, xmlModify)
war.dependsOn(compileJsps, svnRevision, writeVersionProperties)

我的任务已在 commons.gradle 中外部化,如下所示:

...

def writeVersionFile(String whatToWrite) {
    File f = new File(project.webAppDirName+'/WEB-INF/version.properties');
    if (f.exists()) { f.delete(); }

    f = new File(project.webAppDirName+'/WEB-INF/version.properties');
    FileOutputStream os = new FileOutputStream(f);
    os.write(whatToWrite.getBytes());
    os.flush();
    os.close();
}

task clearVersionProperties() {
    println "Clearing version file"
    String whatToWrite = "version=@version@"
    writeVersionFile(whatToWrite)
}

task writeVersionProperties(dependsOn: svnRevision) {
    println "Writing version file"
    String whatToWrite = "version="+project.ext.revision;
    writeVersionFile(whatToWrite)
}
...

据我了解,clean 现在将调用 clearVersionProperties,war 将调用 writeVersionProperties。

但是当我执行 gradle clean 时,反应器计划如下所示:

C:\devtools\....\branches\merge\Application>gradle -bbuild20.gradle clean -Ptomcat=7 -Ptarget=live

To honour the JVM settings for this build a new JVM will be forked. Please consider using the daemon: http://gradle.org/
docs/2.0/userguide/gradle_daemon.html.
_______________________________________________________________________________

### building LIVE system

_______________________________________________________________________________
Clearing version file
Writing version file
JSP compilation...
TC7 Sources integrated
________________________________________________________
Compiling JSPs against Tomcat 7.0.11
________________________________________________________
:clearVersionProperties UP-TO-DATE
:clean UP-TO-DATE

BUILD SUCCESSFUL

Total time: 16.803 secs

为什么任务 clearVersionProperties 和 writeVersionProperties 被执行,因为它们绑定到某些构建阶段?例如任务 infoEnv 没有被执行,但是 - 这确实是一个问题 - 任务 writeVersionProperties 只能由 war 任务执行。

任何帮助表示赞赏!

【问题讨论】:

    标签: java gradle war


    【解决方案1】:

    与此同时,我发现了这些任务被解雇的原因:

    我在任务陈述之后错过了

    task clearVersionProperties() << {
        println "Clearing version file"
        String whatToWrite = "version=@version@"
        writeVersionFile(whatToWrite)
    }
    
    task writeVersionProperties(dependsOn: [svnRevision]) << {
        println "Writing version file"
        String whatToWrite = "version="+project.ext.revision;
        writeVersionFile(whatToWrite)
    }
    
    writeVersionProperties.mustRunAfter clearVersionProperties
    

    这完成了工作....我不确定这是错误、功能还是副作用。但在我看来,就像在函数之后忘记 () 一样,完全是邪恶的陷阱。

    【讨论】:

    • 这就是为什么你不应该使用&lt;&lt;doLast 确实添加一个任务操作。后者还允许您同时配置任务。
    • 但是,如果我想使用增量构建,除了
    • doLast 也可以正常工作(我不确定您如何在此处与增量构建建立联系)。
    • 好吧,我只想在 gradle clean 上清除属性文件,只想在 gradle war 上写入属性,仅当文件不存在时才首选。这将是一个渐进的步骤,对吧?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-01
    • 1970-01-01
    • 2015-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多