将JNI与Gradle(和lombok)一起使用 我试图连接我的java应用程序来编写C++代码。
我从在线教程中收集到的信息是:将JNI与Gradle(和lombok)一起使用 我试图连接我的java应用程序来编写C++代码。,java,gradle,java-native-interface,lombok,Java,Gradle,Java Native Interface,Lombok,我从在线教程中收集到的信息是: 使用带有-h标志的javac为使用本机方法的类生成c/c++头 然后将生成的头导入到c/c++应用程序中并实现它们 将实现的应用程序构建到动态库文件中 将构建的库文件放置在java libs路径中(无论它在哪里) 然后添加一个staticSystem.loadLibrary调用,以加载到构建的库中,因此现在可以使用由库实现的本机函数 我遇到麻烦的第一步是第1步——我收到了大量关于依赖项的编译错误,因此我在网上搜索了如何将JNI与gradle结合使用——而不仅仅是
-h
标志的javac
为使用本机方法的类生成c/c++头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代码生成没有针对这个任务完成。可以这样做吗?您可以尝试通过将编译器arg
-processorpath/to/lombok.jar
来强制运行lombok
如果这个特殊任务的目的只是生成头文件而不是其他文件,那么另一个选择是首先让lombok将所有源代码都放到tempdir中,然后在此基础上运行javac。可能有点夸张。为编译配置注释处理器,如下所示:
dependencies {
annotationProcessor 'org.projectlombok:lombok'
// ...
}
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.annotationProcessorPath = configurations.annotationProcessor
// ^^^^ use the configured annotation processor ^^^^
doLast {
delete file("${buildDir}/generated/jni-tmp")
}
}
现在将处理lombok注释,并且可以正确生成头文件如何生成后者?我觉得在本地gradle deps路径中硬编码lombok jar文件会很奇怪,您必须执行
java-jar path/to/lombok.jar delombok[args for delombok]
,我想这也有点奇怪。javadoc也是如此,也许一些搜索“gradle delombok”的网站展示了一些例子,希望能在没有大量硬编码JAR路径的情况下实现