Gradle编译生成的java文件

时间:2015-03-24 08:27:47

标签: java gradle makefile

我正在尝试将一个大项目转换为使用gradle的当前状态中的makefiles

虽然在某些时候我撞墙了。假设我们有以下目录树(为简单起见省略了很多东西):

root
|-- src
|    +-- main
|         +-- java
|              +-- com
|                  +-- app
|                      |-- a
|                      |-- b
|                      +-- c
+-- build.gradle

现在让我们假设在包com.app.c中存在一个带有主类的java文件,该主文件用于在同一目录下生成一个新的java文件,然后编译该目录。包com.app.c也依赖于其他包。

使用makefile,您可以执行以下操作(一种简单的算法):

  1. 编译包`com.app.a`和`com.app.c`。
  2. 转到软件包`com.app.b`的目录,只编译创建生成文件所需的文件。
  3. 通过在用于生成的文件中运行main函数来创建生成的文件。
  4. 编译整个`com.app.b`包,现在包含生成的文件。

使用gradle虽然我不能做那样的事情(或者至少我认为我不能)。

我想做的是创建一个JavaExec任务,该任务将运行生成生成的java文件的文件,并使其在compileJava之后运行,并使用compileJava完成。但显然这是任务与死胡同之间的循环依赖。

有没有人做过或遇到类似的事情?如果有人可以提供帮助,我会很感激。

请注意,我无法轻易地将文件生成移出该文件,因为它有一些深度依赖...

1 个答案:

答案 0 :(得分:2)

看起来我没有那么好搜索。

在这种情况下,使用this解决方案也可以。

不同之处在于您必须具有以下配置:

task generateFile(type: JavaExec) { ... }

task compileGeneratedFile(type: JavaCompile) { ... }

generateFile.mustRunAfter compileJava
generateFile.finalizedBy compileGeneratedFile
generateFile.onlyIf { !file("path/to/file").exists() }

这似乎可以解决问题!只需发布答案,以便任何有相同问题的人都能轻松找到答案。