java - Gradle:添加从 Java 到 Native 编译的依赖

标签 java c gradle java-native-interface

我尝试为正确的 JNI 编译设置 gradle,所以我需要首先构建一个共享库(使用 c 插件),然后编译和测试 java 代码(使用该库)。

这里是 build.gradle 的示例,与 native 编译相关:

model {
    components {
        yli(NativeLibrarySpec) {
            sources {
                c {
                    source {
                        srcDir 'src/main/c'
                        include "Yli.c"
                        commonFolders.each {
                            include "$it/**/*.c"
                        }
                    }
                }
            }
            buildTypes {
                release
            }
        }
    }
}

告诉 gradle compileJava 应该等待 NativeLibrarySpec 的构建的最佳方式是什么?

编辑:当我尝试添加时

compileJava.dependsOn(yliSharedLibrary)

我在gradle构建过程中出现了以下错误:

* What went wrong:
A problem occurred evaluating root project 'yli'.
> Could not get unknown property 'sharedLibrary' for root project 'yli' of type org.gradle.api.Project.

注意:我使用命令“gradle tasks”来找到任务的名称:“yliSharedLibrary”。

最佳答案

我尝试了这个,发现您可以访问由 software model 创建的任务在闭包内。例如,如果你想依赖一个本地任务,你可以这样做:

compileJava.dependsOn { yliNativeCompileTask }

当然,如果您希望 Java 任务在 native 任务之后执行,但不强制它们之间存在实际依赖关系,您可以使用 mustRunAfter():

compileJava.mustRunAfter { yliNativeCompileTask }

此语法也适用于声明的输入和输出:

compileJava.inputs.files { yliNativeCompileTask }

请注意,如果您将一个任务的输入与另一个任务的输出联系起来,则不必显式声明 dependsOn。 Gradle 推断任务依赖性。

免责声明我不知道这是否是正确的方法,或者您可以采用这种方法多远。

最后一件事:旧的 native 软件模型正在被 new set of native plugins 取代基于 Gradle 的原始模型。将 Java 项目与这些新插件集成起来应该容易得多,但您可能希望等到插件完全充实后再尝试迁移。

关于java - Gradle:添加从 Java 到 Native 编译的依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51772823/

相关文章:

c - 可以直接投写吗?

java - gradle的配置编译和运行时

java - 如何让GridLayout行填充可用空间?

java - 相同的代码在 C 和 Java 中给出了不同的答案,你能帮我吗?

java - keystore 被篡改,或密码不正确 - Java Springboot应用程序

java - 如何将值放入HashMap中?

自定义工具链的CMake工具链文件(-c编译器选项不同含义)

c - 关闭未使用的管道文件描述符

android - 在 Android Studio 中降级 Android 插件

android - 从带有gradle的多个源的android项目中生成android apk