我尝试为正确的 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/