2015-05-08 26 views
6

Gradle ve groovy için oldukça yeni. İşte JNI başlıklarını oluşturur benim görevdir: Tamam çalışırGravür görevini tanımlamanın en iyi yolu

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 

ama biraz çirkin hissediyorum. Bunu nasıl geliştirebilirim? Özellikle benim tarafımdan kodlanmış değişkenleri kaldırmama yardımcı olan önerileri takdir ediyorum. Bu görevi daha genel yapmak istiyorum - şimdi sadece ana sınıf için JNI üstbilgisi üretiyor ancak tüm java dosyaları için çalıştırmak istiyorum. Ayrıca, bu görev başarısız olduğunda (ör., Sınıf yolu yanlıştır), herhangi bir hata iletisi yazdırmaz ve başarılı olur, bu da yanıltıcıdır. Bu görev, bu şekilde her şey bir yapılandırma olduğunu

task generateJniHeaders(type:Exec) { 
    def classpath = sourceSets.main.output.classesDir 
    def nativeIncludes = "src/native/include"      
    commandLine "javah", "-d", nativeIncludes, "-classpath", classpath, "$mainClassName" 

    dependsOn classes 
} 

Not: kullanmak daha uygun olur böylece

cevap

12
  1. Gradle bir komut satırı özelliğiyle tip Exec bir görev türü vardır bir eylemden ziyade (Gradle'ın yapı yaşam döngüsüne aşina değilseniz, önerilen bir okuma, kullanıcı kılavuzunda bulunan this bölümüdür.

  2. build.dependsOn GenerateJniHeaders hiç gerekli değildir jar.dependsOn GenerateJniHeaders

  3. classes.finalizedBy tarafından değiştirilmelidir. finalizedBy'un genellikle, görev başarısız olsa bile, temizleme işlemlerinde kullanıldığını unutmayın.

İlgili konular