Java 执行gradle build时需要执行自定义任务

Java 执行gradle build时需要执行自定义任务,java,gradle,java-native-interface,Java,Gradle,Java Native Interface,我正在从事Java/JNI项目。在parent下,我有不同的java和C代码库模块。java模块需要生成JNI头文件。因为,我找不到任何支持javah的现有任务/插件,所以我为javah编写了自定义任务来生成JNI接口。所以,当我这么做的时候 格拉德勒贾瓦赫 我得到了期望的输出 然而,我希望无论何时调用gradlebuild,它都应该在生成类或构建任务结束后执行一次javah任务 另外,当我只进行gradlebuild时,是否可以在这样一个混合项目中生成共享库?目前,我必须做gradlesh

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

格拉德勒贾瓦赫

我得到了期望的输出

  • 然而,我希望无论何时调用
    gradlebuild
    ,它都应该在生成类或构建任务结束后执行一次javah任务
  • 另外,当我只进行
    gradlebuild
    时,是否可以在这样一个混合项目中生成共享库?目前,我必须做
    gradlesharedlibrary
  • 第1部分:您可以在
    task1
    上使用
    finalizedBy
    task1
    完成后执行
    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
    共享库
    任务连接起来,如下所示:

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

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

    好吧,你可以
    dependsOn(compileJava)
    我尝试了这个方法,但它似乎不起作用。我研究了finalizedBy,它将允许调用javah,即使任务“类”失败。我希望在任务“类”成功时调用javah。编辑了我的答案。这可以通过为
    javah
    任务添加对
    类的依赖来克服<代码>javah.dependsOn类