Próbuję użyć avro-gradle-plugin on github, ale nie mam żadnego szczęścia, aby to działało. Czy ktokolwiek ma przykładowy kod na temat tego, jak działają?avro gradle plugin przykładowe użycie
5
A
Odpowiedz
5
Sam wymyśliłem, jak to zrobić. Poniżej znajduje się fragment, który chciałbym podzielić się z ludźmi, którzy mogą biegać w tych samych kwestiach jak ja:
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
znalazłem „com.commercehub.gradle.plugin.avro” wtyczki Gradle działać lepiej.
użyć 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"
więcej szczegółów na https://github.com/commercehub-oss/gradle-avro-plugin
0
Przy ocenie plugin następujące pytania musi być pytanie:
- generowane są pliki znajdujące się w źródłowej słoika?
- Czy wtyczka jest szybka? Dobra wtyczka używa api avro tool zamiast rozwidlenia VM dla każdego pliku. W przypadku dużej ilości plików tworzenie VM dla każdego pliku może zająć 10 minut na skompilowanie.
- Potrzebujesz pośrednich plików avsc?
- Czy kompilacja jest przyrostowa (tzn. Nie regeneruje wszystkich plików, chyba że zmieniono jedno ze źródeł)?
- Czy wtyczka jest wystarczająco elastyczna, aby dać dostęp do wygenerowanych plików schematów, więc można podjąć dalsze działania, takie jak schemat rejestracji w repozytorium schematów?
Łatwo jest zaimplementować bez żadnej wtyczki, jeśli nie jesteś zadowolony z wtyczki lub potrzebujesz większej elastyczności.
//
// 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')
}