avro gradle插件样本用法

时间:2012-11-12 20:48:58

标签: hadoop gradle avro

我正在尝试使用avro-gradle-plugin on github,但是没有任何运气让它运转起来。有没有人有关于它们如何运作的示例代码?

3 个答案:

答案 0 :(得分:7)

我想出了自己该怎么做。以下是我想与可能遇到与我相同问题的人分享的片段:

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
}

答案 1 :(得分:1)

我发现“com.commercehub.gradle.plugin.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

的详细信息

答案 2 :(得分:0)

评估插件时,需要提出以下问题:

  • 生成的文件是否包含在源jar中?
  • 插件快吗?好的插件使用avro工具api而不是为每个文件分配VM。对于大量文件,为每个文件创建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')
}