【问题标题】:Custom Task needs to be executed when gradle build is executed执行gradle build时需要执行Custom Task
【发布时间】:2015-01-08 05:36:21
【问题描述】:

我正在从事 Java/JNI 项目。在 parent 下,我有 java 和 C 代码库的不同模块。Java 模块需要生成 JNI 头文件。因为,我找不到任何支持 javah 的现有任务/插件,所以我为 javah 编写了自定义任务来生成 JNI 接口。所以,当我这样做时 gradle javah

我得到了想要的输出。

  1. 但是,我希望每当我调用 gradle build 时,它也应该在生成类或构建任务结束后执行一次 javah 任务。
  2. 另外,如果我只做gradle build,是否可以在这样一个混合项目中生成共享库?目前,我必须做gradle <project-name>SharedLibrary

【问题讨论】:

  • 嗯,你可以dependsOn(compileJava)
  • 我试过了,但似乎没有用。

标签: java gradle java-native-interface


【解决方案1】:

第 1 部分:您可以在 task1 上使用 finalizedBytask1 完成后执行 task2。对于您的情况,您可以尝试以下方法:

// 'javah' will be executed after 'classes' task executes.
classes.finalizedBy javah 

// Make 'javah' task depend on 'classes' task,
// so that when 'classes' task fails, 'javah' is not executed.  
javah.dependsOn classes

// Make 'build' depend on 'javah' task,
// so that executing 'build' task automatically executes 'javah'
build.dependsOn javah

第 2 部分:您可以使用dependsOn 连接<project-name>SharedLibrary 任务,如下所示:

build.dependsOn "${project.name}SharedLibrary"

// Assuming the SharedLibrary task needs to depend on 'javah' task
tasks["${project.name}SharedLibrary"].dependsOn javah  

我假设 SharedLibarary 任务名称是动态的,因此对该任务使用的语法略有不同。

【讨论】:

  • 我已经研究了 finalizedBy,即使任务“类”失败,它也可以调用 javah。我希望在任务“类”成功时调用 javah。
  • 编辑了我的答案。这可以通过为javah 任务添加对classes 的依赖来克服。 javah.dependsOn classes.
猜你喜欢
  • 2020-03-16
  • 2014-12-29
  • 1970-01-01
  • 2023-03-15
  • 1970-01-01
  • 1970-01-01
  • 2021-06-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多