2012-11-12 9 views

Odpowiedz

5

Sam wymyśliłem, jak to zrobić. Poniżej znajduje się fragment, który chciałbym podzielić się z ludźmi, którzy mogą biegać w tych samych kwestiach jak ja:

apply plugin: 'java' 
apply plugin: 'avro-gradle-plugin' 

sourceCompatibility = "1.6" 
targetCompatibility = "1.6" 

buildscript { 
    repositories { 
    maven { 
     // your maven repo information here 
    } 
    } 
    dependencies { 
    classpath 'org.apache.maven:maven-artifact:2.2.1' 
    classpath 'org.apache.avro:avro-compiler:1.7.1' 
    classpath 'org.apache.avro.gradle:avro-gradle-plugin:1.7.1' 
    } 
} 

compileAvro.source = 'src/main/avro' 
compileAvro.destinationDir = file("$buildDir/generated-sources/avro") 

sourceSets { 
    main { 
    java { 
     srcDir compileAvro.destinationDir 
    } 
    } 
} 

dependencies { 
    compileAvro 
} 
0

znalazłem „com.commercehub.gradle.plugin.avro” wtyczki Gradle działać lepiej.

użyć folllowing:

// Gradle 2.1 and later 
plugins { 
    id "com.commercehub.gradle.plugin.avro" version "VERSION" 
} 

// Earlier versions of Gradle 
buildscript { 
    repositories { 
     jcenter() 
    } 
    dependencies { 
     classpath "com.commercehub.gradle.plugin:gradle-avro-plugin:VERSION" 
    } 
} 
apply plugin: "com.commercehub.gradle.plugin.avro" 

więcej szczegółów na https://github.com/commercehub-oss/gradle-avro-plugin

0

Przy ocenie plugin następujące pytania musi być pytanie:

  • generowane są pliki znajdujące się w źródłowej słoika?
  • Czy wtyczka jest szybka? Dobra wtyczka używa api avro tool zamiast rozwidlenia VM dla każdego pliku. W przypadku dużej ilości plików tworzenie VM dla każdego pliku może zająć 10 minut na skompilowanie.
  • Potrzebujesz pośrednich plików avsc?
  • Czy kompilacja jest przyrostowa (tzn. Nie regeneruje wszystkich plików, chyba że zmieniono jedno ze źródeł)?
  • Czy wtyczka jest wystarczająco elastyczna, aby dać dostęp do wygenerowanych plików schematów, więc można podjąć dalsze działania, takie jak schemat rejestracji w repozytorium schematów?

Łatwo jest zaimplementować bez żadnej wtyczki, jeśli nie jesteś zadowolony z wtyczki lub potrzebujesz większej elastyczności.

// 
// define source and destination 
// 
def avdlFiles = fileTree('src/Schemas').include('**/*.avdl') 
// Do NOT generate into $buildDir, because IntelliJ will ignore files in 
// this location and will show errors in source code 
def generatedJavaDir = "generated/avro/java" 

sourceSets.main.java.srcDir generatedJavaDir 

// 
// Make avro-tools available to the build script 
// 
buildscript { 
    dependencies { 
     classpath group:'org.apache.avro', name:'avro-tools' ,version: avro_version 
    } 
} 

// 
// Define task's input and output, compile idl to schema and schema to java 
// 
task buildAvroDtos(){ 
    group = "build" 

    inputs.files avdlFiles 
    outputs.dir generatedJavaDir 

    doLast{ 
     avdlFiles.each { avdlFile -> 
      def parser = new org.apache.avro.compiler.idl.Idl(avdlFile) 
      parser.CompilationUnit().getTypes().each { schema -> 
       def compiler = new org.apache.avro.compiler.specific.SpecificCompiler(schema) 
       compiler.compileToDestination(avdlFile, new File(generatedJavaDir)) 
      } 
     } 
    } 
} 

// 
// Publish source jar, including generated files 
// 
task sourceJar(type: Jar, dependsOn: buildAvroDtos) { 
    from sourceSets.main.allSource 
    // Package schemas into source jar 
    into("Schemas") { from avdlFiles } 
} 

// Clean "generated" folder upon "clean" task 
clean { 
    delete('generated') 
}