пример использования плагина avro gradle


Я пытаюсь использовать avro-gradle-плагин на github , но мне не удалось заставить его работать. У кого-нибудь есть пример кода, как заставить его работать?

3 5

3 ответа:

Я сам придумал, как это сделать. Ниже приведен фрагмент, который я хотел бы поделиться для людей, которые могут столкнуться с теми же проблемами, что и я:

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
}

Я нашел "com.commercehub.градля.плагин.Avro " gradle плагин, чтобы работать лучше.

Используйте следующее:

// 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"

Подробнее в https://github.com/commercehub-oss/gradle-avro-plugin

При оценке плагина необходимо задать следующие вопросы:

  • генерируются файлы, включенные в архив Источник?
  • является ли плагин быстрым? Хороший плагин использует api avro tools вместо разветвления VM для каждого файла. Для большого количества файлов создание виртуальной машины для каждого файла может занять 10 минут для компиляции.
  • нужны ли вам промежуточные файлы avsc?
  • является ли сборка инкрементной (т. е. не восстанавливать все файлы, если не изменен один из источников)?
  • является ли плагин достаточно гибким чтобы предоставить доступ к сгенерированным файлам схем, чтобы можно было выполнять дальнейшие действия, такие как регистрация схемы в хранилище схем?

Это достаточно легко реализовать без какого-либо плагина, если вы не довольны плагином или нуждаетесь в большей гибкости.

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