Gradle运行bat文件作为依赖项

时间:2014-10-21 20:58:09

标签: java eclipse batch-file gradle

我们有一个.bat文件,用于生成一些源代码。它足够聪明,可以将所有生成的.java文件放在项目的正确位置。

我已经定义了这样的gradle任务:

task createPojos(type:Exec) {
    workingDir "$dirXsd"
    commandLine 'cmd', '/c', 'createPojos.bat'
}

我还在build.gradle中将此任务定义为defaultTask。这是有效的,当我从命令行运行'gradle'或从Eclipse执行createPojo任务时,它会按预期生成代码。但是我想将它定义为依赖项,以便当我执行Gradle时 - >从Eclipse中刷新全部它运行上面运行.bat的任务。

我试图找出如何将我的createPojo任务作为依赖项运行,但是失败了。我不能很好地理解Gradle概念 - 你能指定一个自定义任务作为依赖吗?不是对另一个任务的依赖,而是build.gradle文件的依赖部分中的某些内容?当我刷新所有内容时,我尝试的所有内容都会给我一些gradle错误。以下是一次尝试:

dependencies {
    createPojos() // how do I invoke createPojos from here?
}
A problem occurred evaluating project ':WebTransport'.
> Could not find method createPojos() for arguments [] on project ':WebTransport'.

2 个答案:

答案 0 :(得分:1)

一般情况下,您可以通过调用execute方法特定任务的实例来运行任务。但这肯定是 而不是应该如何调用任务。

如果您需要在createPojos()块中调用dependencies,请将其逻辑移至build.gradle文件中定义的方法,并直接在dependencies和任务操作中调用该方法。

您知道每次调用gradle时都会在createPojos()中调用dependencies吗?我不知道在运行刷新所有的时候究竟调用了什么,但我想你不会通过这个讨厌的任务调用来改变它的行为。

如果您需要将生成的类放在src文件夹下,请创建一个生成文件并将其放在所需位置的任务。我假设如果生成了分类,则不会对其进行编辑。如果是这样,创建生成类的其他项目,编译它们并作为jar文件发布。然后在当前项目中添加一个生成jar的依赖项。

最后,你不能将任务指定为依赖,至少不是你想象的那样。

答案 1 :(得分:1)

您需要任务依赖项,而不是模块依赖项(这些是非常不同的东西)。像eclipse.dependsOn("createPojos")这样的东西。但是,根据我的记忆,Eclipse中的“Gradle-> Refresh”仅刷新模块依赖项,但不运行任何任务。因此,您可能必须重新导入项目,该项目将运行eclipse以及导入对话框中指定的任何其他任务。