2012-11-12 10 views

risposta

5

Ho capito come farlo da solo. Il seguente è un frammento che mi piacerebbe condividere per persone che potrebbero incorrere negli stessi problemi come ho fatto io:

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

ho trovato "com.commercehub.gradle.plugin.avro" plug Gradle a lavorare meglio.

utilizzare i 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" 

più dettagli a https://github.com/commercehub-oss/gradle-avro-plugin

0

Quando si valuta un plugin alle seguenti domande deve essere chiesto:

file
  • vengono generati inclusi nel barattolo fonte?
  • Il plug-in è veloce? Un buon plugin usa l'API di strumenti avro invece di eseguire il fork della VM per ogni file. Per una grande quantità di file, la creazione di una VM per ogni file può richiedere 10 minuti per la compilazione.
  • Avete bisogno di file avsc intermedi?
  • La build è incrementale (ad esempio, non rigenerare tutti i file a meno che una delle fonti non sia stata modificata)?
  • Il plug-in è abbastanza flessibile da consentire l'accesso ai file di schema generati, pertanto è possibile eseguire ulteriori azioni, come lo schema di registrazione nel repository di schemi?

È abbastanza facile implementare senza alcun plug-in se non si è soddisfatti del plug-in o se si ha bisogno di maggiore flessibilità.

// 
// 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') 
}