【问题标题】:avro gradle plugin sample usageavro gradle 插件示例使用
【发布时间】:2012-11-12 20:48:58
【问题描述】:

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

【问题讨论】:

    标签: hadoop gradle avro


    【解决方案1】:

    我自己想出了如何去做。以下是我想分享给可能遇到与我相同问题的人的sn-p:

    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
    }
    

    【讨论】:

      【解决方案2】:

      我发现“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

      【讨论】:

        【解决方案3】:

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

        • 生成的文件是否包含在源 jar 中?
        • 插件速度快吗?好的插件使用 avro tools 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')
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-07-01
          • 2012-05-29
          • 1970-01-01
          • 2018-07-05
          • 2016-11-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多