Gradle 编译生成 java 文件
Gradle compile generated java file
我正在尝试将一个大项目从使用 makefiles
.
的当前状态转换为使用 gradle
虽然在某些时候我遇到了困难。假设我们有以下目录树(为简单起见省略了很多东西):
root
|-- src
| +-- main
| +-- java
| +-- com
| +-- app
| |-- a
| |-- b
| +-- c
+-- build.gradle
现在假设在包 com.app.c
中存在一个 java 文件,其主文件 class 用于在同一目录下生成新的 java 文件然后也应该编译它。包 com.app.c
也依赖于其他包。
使用 makefile,您可以执行如下操作(一个简单的算法):
- 编译包 `com.app.a` 和 `com.app.c`。
- 移动到包目录 `com.app.b` 并只编译创建生成文件所需的文件。
- 通过运行在用于生成的文件中使用主函数来创建生成的文件。
- 编译整个 `com.app.b` 包,其中现在包含生成的文件。
使用 gradle 虽然我做不到那样的事情(或者至少我认为我做不到)。
我想做的是创建一个 JavaExec 任务,该任务将 运行 生成生成的 java 文件的文件,并在 compileJava 之后使其成为 运行 并使用 compileJava 完成。但显然这是任务之间的循环依赖和死胡同。
有没有人做过或遇到过类似的事情?如果有人能提供帮助,我将不胜感激。
请注意,我不能轻易地将文件生成移出该文件,因为它有一些深度依赖关系...
看来我没搜到那么好
使用 this 解决方案也适用于这种情况。
不同的是你必须有以下配置:
task generateFile(type: JavaExec) { ... }
task compileGeneratedFile(type: JavaCompile) { ... }
generateFile.mustRunAfter compileJava
generateFile.finalizedBy compileGeneratedFile
generateFile.onlyIf { !file("path/to/file").exists() }
这似乎可以解决问题!只是发布答案,这样任何有相同问题的人都会发现它更容易。
我正在尝试将一个大项目从使用 makefiles
.
gradle
虽然在某些时候我遇到了困难。假设我们有以下目录树(为简单起见省略了很多东西):
root
|-- src
| +-- main
| +-- java
| +-- com
| +-- app
| |-- a
| |-- b
| +-- c
+-- build.gradle
现在假设在包 com.app.c
中存在一个 java 文件,其主文件 class 用于在同一目录下生成新的 java 文件然后也应该编译它。包 com.app.c
也依赖于其他包。
使用 makefile,您可以执行如下操作(一个简单的算法):
- 编译包 `com.app.a` 和 `com.app.c`。
- 移动到包目录 `com.app.b` 并只编译创建生成文件所需的文件。
- 通过运行在用于生成的文件中使用主函数来创建生成的文件。
- 编译整个 `com.app.b` 包,其中现在包含生成的文件。
使用 gradle 虽然我做不到那样的事情(或者至少我认为我做不到)。
我想做的是创建一个 JavaExec 任务,该任务将 运行 生成生成的 java 文件的文件,并在 compileJava 之后使其成为 运行 并使用 compileJava 完成。但显然这是任务之间的循环依赖和死胡同。
有没有人做过或遇到过类似的事情?如果有人能提供帮助,我将不胜感激。
请注意,我不能轻易地将文件生成移出该文件,因为它有一些深度依赖关系...
看来我没搜到那么好
使用 this 解决方案也适用于这种情况。
不同的是你必须有以下配置:
task generateFile(type: JavaExec) { ... }
task compileGeneratedFile(type: JavaCompile) { ... }
generateFile.mustRunAfter compileJava
generateFile.finalizedBy compileGeneratedFile
generateFile.onlyIf { !file("path/to/file").exists() }
这似乎可以解决问题!只是发布答案,这样任何有相同问题的人都会发现它更容易。