[英]Using JNI with Gradle (and lombok)
我正在嘗試將我的 Java 應用程序連接到我編寫的 c++ 代碼。
我從網上教程中收集到的是:
-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 function 的未找到符號。
我已經正確設置了 lombok - 我的正常 gradle 構建工作正常 - 但我認為 lombok 代碼生成沒有針對此任務完成。 是否有可能做到這一點?
為編譯配置注釋處理器,如下所示:
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 注釋,可以正確生成 header 文件
您可以嘗試通過添加編譯器 arg -processorpath path/to/lombok.jar
。
如果這個特定任務的目的只是生成 header 文件而不是別的,另一個選擇是首先讓 lombok delombok 將所有源代碼放入一個 tempdir,然后在其上運行 javac。 有點激烈,也許。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.