10

githubでavro-gradle-pluginを使用しようとしていますが、動作させることができません。誰かがそれをどのように機能させるかについてのサンプルコードを持っていますか?

4

3 に答える 3

15

私はそれを自分で行う方法を考え出しました。以下は、私と同じ問題が発生する可能性のある人々のために共有したいスニペットです。

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
}
于 2012-11-13T19:00:19.473 に答える
4

「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をご覧ください。

于 2015-05-06T12:22:16.017 に答える
3

プラグインを評価するときは、次の質問をする必要があります。

  • 生成されたファイルはソースjarに含まれていますか?
  • プラグインは高速ですか?優れたプラグインは、すべてのファイルに対してVMをフォークする代わりに、avrotoolsapiを使用します。大量のファイルの場合、すべてのファイルに対してVMを作成すると、コンパイルに10分かかる場合があります。
  • 中間のavscファイルが必要ですか?
  • ビルドはインクリメンタルですか(つまり、ソースの1つが変更されない限り、すべてのファイルを再生成しないでください)?
  • プラグインは、生成されたスキーマファイルへのアクセスを提供するのに十分な柔軟性があるので、スキーマリポジトリの登録スキーマなどの追加のアクションを実行できますか?

プラグインに満足できない場合や、より柔軟性が必要な場合は、プラグインなしで実装するのは簡単です。

//
// 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')
}
于 2016-01-11T18:40:54.117 に答える