... 在哪里 runexe在别处声明为 -6ren">
gpt4 book ai didi

gradle - Gradle 中的 Ant taskdef 等价物是什么?

转载 作者:行者123 更新时间:2023-12-03 06:05:44 26 4
gpt4 key购买 nike

我已经为此苦苦挣扎了一天半左右。我正在尝试在 Gradle 中复制以下 Ant 概念:

<target name="test">
...
<runexe name="<filename> params="<params>" />
...
</target>

在哪里 runexe在别处声明为
<macrodef name="runexe" >
...
</macrodef>

也可能是 taskdefscriptdef即我希望能够调用可重用的预定义代码块,并从 Gradle 任务中传递必要的参数。我已经尝试了很多东西。我可以创建一个运行 exe 的任务而不会遇到任何问题:
task runexe(type: Exec){
commandLine 'cmd', '/c', 'dir', '/B'
}

task test(dependsOn: 'runexe') {
runexe {
commandLine 'cmd', '/c', 'dir', '/N', 'e:\\utilities\\'
}
}

test << {
println "Testing..."

// I want to call runexe here.

...
}

并使用 dependsOn 让它运行。但是,这不允许我运行 runexe正是我需要的时候。我已经对 executable 进行了广泛的实验。 , argscommandLine .我玩过 exec并尝试了在这里和网络周围发现的几种不同的变体。我也一直在使用 Gradle 网站上提供的免费书籍。

我需要做的是从目录中读取文件列表,并将每个文件与其他一些参数一起传递给应用程序。文件列表要到执行时间才能知道,即在脚本读取它们之前,列表可能会有所不同,并且需要重复进行调用。

我目前最好的选择似乎是我发现的 here ,这可能很好,但似乎应该有更好的方法。我知道任务应该被调用一次,并且您不能从另一个任务中调用任务或传递一个参数,但我非常想知道 Gradle 中的正确方法是什么。我希望 Gradle 的一位设计师可能会善意地启发我,因为这是一个在整个网络上经常被问到的问题,我还没有找到一个明确的答案或我可以工作的解决方案。

最佳答案

如果您的任务需要读取文件名,那么我建议使用提供的 API 而不是执行命令。也使用 exec将使其特定于操作系统,因此不一定可在不同的操作系统上移植。

这是如何做到的:

task hello {
doLast {
def tree = fileTree(dir: '/tmp/test/txt')
def array = []
tree.each {
array << it
print "${it.getName()} added to array!\n"
}
}
}

关于gradle - Gradle 中的 Ant taskdef 等价物是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38973555/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com