gradle中的本地依赖关系

native dependencies in gradle

本文关键字:依赖 关系 gradle      更新时间:2023-10-16

我想在gradle中构建一个有几个依赖项的java项目,有些是来自maven中央存储库的jar依赖项,有些是其他java项目依赖项,但也有一个本地JNI依赖项。我已经设法将gradle作为一个单独的项目来构建原生依赖关系。

现在我想在我的java项目中导入已编译的.so库作为dependency。我以为它会这样工作:

dependencies {
    compile project(':nameofnativedependency')
}

该项目也列在我的settings.gradle文件中。然而,当我编译项目时,我可能会得到一个错误:

无法确定任务"的依赖项:测试

找不到名称为"default"的配置。

所以一定有什么地方被误解了。编译本机项目并在调用项目中导入.so文件的正确方法是什么(我希望有)?

Gradle原生插件使用了新的基于规则的软件模型。模型元素在build.gradle处理完毕后才会被实例化,一旦被实例化,它们就不可变了。要访问这些元素,您需要将代码放入components闭包中,并通过$变量访问模型元素(请记住,以这种方式访问的元素将被实例化,因此是不可变的)。

要将java构建与本机构建集成,您可能需要使用java软件模型插件,而不是传统的java插件。我一直在尝试它,并有了一个我开始感到有点自豪的构建脚本,它包含了从类文件生成头文件、构建库、复制到src/main/resources以捆绑在jar中,然后在运行时提取和加载库的所有步骤(尽管这部分还没有完全完成;Scijava的本地库加载器可能是最好的方法)。