use*_*095 10 java java-native-interface groovy gradle
我很擅长gradle和groovy.这是我生成JNI标头的任务:
apply plugin: 'java'
apply plugin: 'application'
mainClassName = "com.my.example.HelloG"
task GenerateJniHeaders(dependsOn: 'classes') << {
def classpath = "build/classes/main"
def nativeIncludes = "src/native/include"
"javah -d ${nativeIncludes} -classpath ${classpath} ${mainClassName}".execute()
}
classes.finalizedBy GenerateJniHeaders
build.dependsOn GenerateJniHeaders
Run Code Online (Sandbox Code Playgroud)
它工作正常,但我觉得它有点难看.我怎样才能改进它?我感谢任何建议,特别是那些帮我删除硬编码的变量的建议.我还想使这个任务更通用 - 现在它只为主类生成JNI头,但我想为所有java文件运行它.此外,当此任务失败时(例如,类路径错误),它不会打印任何错误消息并构建成功,这会产生误导.
Amn*_*hot 14
Gradle具有Exec类型的任务类型,具有命令行属性,因此使用它更合适:
task generateJniHeaders(type:Exec) {
def classpath = sourceSets.main.output.classesDir
def nativeIncludes = "src/native/include"
commandLine "javah", "-d", nativeIncludes, "-classpath", classpath, "$mainClassName"
dependsOn classes
}
Run Code Online (Sandbox Code Playgroud)
请注意,这样一来,此任务中的所有内容都是配置而不是操作(如果您不熟悉Gradle的构建生命周期,那么建议的阅读将在用户指南的此部分中进行.
build.dependsOn GenerateJniHeaders
应该被替换 jar.dependsOn GenerateJniHeaders
classes.finalizedBy
根本不需要.请注意,finalizedBy
即使任务失败,它也会在执行时用于清理.
归档时间: |
|
查看次数: |
2211 次 |
最近记录: |