我正在尝试将我的java应用程序连接到我编写的c代码中。
我从在线教程中收集到的是:
你用 javac
与 -h
为具有本机方法的类生成c/c头的标志
然后将生成的头文件导入c/c++应用程序并实现它们
将实现的应用程序构建到动态库文件中
将构建的库文件放在javalibs路径中(不管它在哪里)
然后添加一个静态 System.loadLibrary
调用,以加载到构建的库中,因此现在可以使用由库实现的本机函数。
我遇到的第一个问题是第1步-我得到了大量关于依赖项的编译错误,因此我在网上搜索了一些关于如何将jni与gradle结合使用的信息-而不仅仅是纯java编译器,我发现了这个任务:
task generateJniHeaders(type: JavaCompile) {
classpath = sourceSets.main.compileClasspath
destinationDir file("${buildDir}/generated/jni")
source = sourceSets.main.java
options.compilerArgs += [
'-h', file("${buildDir}/generated/jni"),
'-d', file("${buildDir}/generated/jni-tmp")
]
// options.verbose = true
doLast {
delete file("${buildDir}/generated/jni-tmp")
}
}
这个任务看起来很有效,但是现在我遇到的问题是它不能通过lombok注解编译;例如,我得到了一个由lombok生成的getter函数的未找到符号。
我已经正确地设置了lombok-我的正常gradle构建工作正常-但是我假设lombok代码生成并不是为这个任务完成的。有可能这样做吗?
2条答案
按热度按时间cqoc49vn1#
您可以尝试通过添加编译器参数来强制lombok运行
-processorpath path/to/lombok.jar
.如果这个特殊任务的目的只是生成头文件而不是别的什么,那么另一个选择是首先让lombok-delombok将所有源代码放到tempdir中,然后在此基础上运行javac。也许有点激烈。
vsaztqbk2#
为编译配置注解处理器,如下所示:
现在将处理lombok注解并正确生成头文件