2014-03-02 29 views
0

以下是我正在使用的最小build.gradle文件。在gradle build的installApp阶段对每个文件执行操作

apply plugin: 'application' 

installApp { 
    eachFile { 
    println "$it.name" 
    loadProperties(it) 
    } 
} 

我想要的属性加载到属性文件位于src/dist/bin一些占位符。如果属性文件在src/main/resources中,并且我将installApp替换为processResources,则此技术可以正常工作,这是我在构建中的另一个项目中执行的操作。

println没有打印任何内容,因此占位符没有被替换,但我不明白为什么它不会遍历installApp任务正在复制的所有文件。

使用gradle 1.10作为./gradlew clean installApp运行。

看来installApp任务不会运行传递给eachFile函数的闭包。下面是一个说明这种行为

apply plugin: "application" 

mainClassName = "test.Test" 

installApp { 
    eachFile { 
    println "$it.name" 
    } 
} 

我跑gradle clean installApp -i

和周围的installApp部分得到

:installApp (Thread[main,5,main]) started. 
:installApp 
Executing task ':installApp' (up-to-date check took 0.011 secs) due to: 
    Output file /Users/joshbrackett/Documents/workspace/gtest/build/install/gtest has changed. 
    Output file /Users/joshbrackett/Documents/workspace/gtest/build/install/gtest/bin/gtest has been removed. 
    Output file /Users/joshbrackett/Documents/workspace/gtest/build/install/gtest/lib/gtest.jar has been removed. 
:installApp (Thread[main,5,main]) completed. Took 0.748 secs. 
+0

如果不打印任何内容,则可能是没有安装任何文件。也许这个任务已经是'最新日期'了。 –

+0

@PeterNiederwieser - 我已经更新了我的问题,包括我正在做一个干净的。我甚至手动删除了安装目录以确保文件(启动脚本/ propery文件)正在移动,但属性文件仍然有占位符。 – Josh

+0

我真的不知道你是如何尝试做替代。无论如何,如果'println'没有生效,我唯一合乎逻辑的结论就是什么都没有得到同步。 –

回答

1

我已经复制您的问题完整的build.gradle文件。我怀疑这是一个错误。在我们进一步调查的时候,这里有一个解决方法可以帮助我。

使您的eachFile呼吁applicationDistribution copySpec而不是installApp任务。

applicationDistribution.eachFile { 
    println "$it.name" 
} 

我怀疑这就是你想要做的事情,因为那样它也会被dist任务使用。

顺便说一句,你也可能会发现expand方法感兴趣http://www.gradle.org/docs/current/javadoc/org/gradle/api/file/CopySpec.html#expand(java.util.Map)

0

这在摇篮2.3似乎又变了。现在使用applicationDistribution不起作用,您需要使用installDist

相关问题