Skip to content

Maven plugin for generating Scala case classes and ADTs from Apache Avro schemas, datafiles, and protocols

License

Notifications You must be signed in to change notification settings

makubi/avrohugger-maven-plugin

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Avrohugger Maven Plugin

Maven plugin for generating Scala case classes and ADTs from Apache Avro schemas, datafiles, and protocols.

Build Status Maven Central Join the chat at https://gitter.im/julianpeeters/avrohugger

Usage

The plugin currently supports one goal:

  • generate-scala-sources: This generates the Scala sources for the Avro schema
<plugin>
    <groupId>at.makubi.maven.plugin</groupId>
    <artifactId>avrohugger-maven-plugin</artifactId>
    <version>1.7</version>
    <executions>
        <execution>
            <phase>generate-sources</phase>
            <goals>
                <goal>generate-scala-sources</goal>
            </goals>
        </execution>
    </executions>
</plugin>

Usage in conjunction with the scala-maven-plugin

This plugin can be used in conjunction with the scala-maven-plugin to add the generated Scala sources to your Scala build.

<plugins>
    <plugin>
        <groupId>at.makubi.maven.plugin</groupId>
        <artifactId>avrohugger-maven-plugin</artifactId>
        <executions>
            <execution>
                <phase>generate-sources</phase>
                <goals>
                    <goal>generate-scala-sources</goal>
                </goals>
            </execution>
        </executions>
    </plugin>

    <plugin>
        <groupId>net.alchim31.maven</groupId>
        <artifactId>scala-maven-plugin</artifactId>
        <executions>
            <execution>
                <id>add-generated-sources</id>
                <phase>generate-sources</phase>
                <goals>
                    <goal>add-source</goal>
                </goals>
                <configuration>
                    <sourceDir>${project.build.directory}/generated-sources/avro</sourceDir>
                </configuration>
            </execution>
            <execution>
                <goals>
                    <goal>compile</goal>
                    <goal>testCompile</goal>
                </goals>
            </execution>
        </executions>
        ...
    </plugin>
</plugins>

Override variables

You can override the following variables in the plugin configuration:

sourceDirectory

  • Path to the directory containing the Avro schema files
  • Defaults to ${basedir}/src/main/avro

outputDirectory

  • Path to the output directory for the generated Scala sources
  • Defaults to ${project.build.directory}/generated-sources/avro

recursive

  • Boolean to allow recursion over the specified sourceDirectory
  • Defaults to false

limitedNumberOfFieldsInCaseClasses

  • Boolean to restrict case class generation for compatibility with scala 2.10
  • Defaults to false

sourceGenerationFormat

  • Format for source code generation
  • Possible values are SCAVRO, SPECIFIC_RECORD and STANDARD
  • Defaults to SPECIFIC_RECORD

namespaceMapping

  • Map namespace in Avro files to custom package name in generated scala files
  • Defaults to Empty List (Namespace is not modified)

fileIncludes

typeOverrides

  • Override for types for generation
  • Possible elements
    • Complex
      • arrayType
      • enumType
      • fixedType
      • mapType
      • protocolType
      • recordType
      • unionType
    • Primitive
      • booleanType
      • bytesType
      • doubleType
      • floatType
      • intType
      • longType
      • nullType
      • stringType
    • Logical
      • timestampMillisType - possible values are JavaTimeInstant or JavaSqlTimestamp
  • Defaults to no overrides

Example

To override the sourceDirectory and outputDirectory, use

<plugins>
    <plugin>
        <groupId>at.makubi.maven.plugin</groupId>
        <artifactId>avrohugger-maven-plugin</artifactId>
        <executions>
            <execution>
                <phase>generate-sources</phase>
                <goals>
                    <goal>generate-scala-sources</goal>
                </goals>
            </execution>
        </executions>
        <configuration>
            <sourceDirectory>src/main/resources/avro</sourceDirectory>
            <outputDirectory>target/generated-sources</outputDirectory>
        </configuration>
    </plugin>
</plugins>

To override the sourceDirectory, outputDirectory, recurse over sourceDirectory, and restrict generated class fields to be compatible with Scala 2.10 use

<plugins>
    <plugin>
        <groupId>at.makubi.maven.plugin</groupId>
        <artifactId>avrohugger-maven-plugin</artifactId>
        <executions>
            <execution>
                <phase>generate-sources</phase>
                <goals>
                    <goal>generate-scala-sources</goal>
                </goals>
            </execution>
        </executions>
        <configuration>
            <sourceDirectory>src/main/resources/avro</sourceDirectory>
            <outputDirectory>target/generated-sources</outputDirectory>
            <recursive>true</recursive>
            <limitedNumberOfFieldsInCaseClasses>true</limitedNumberOfFieldsInCaseClasses>>
        </configuration>
    </plugin>
</plugins>

To override the namespaceMapping of Avro protocols under the com.example.packagename namespace to com.example.packagenamechanged and include all files in a subdirectory and its subdirectories named subdir, use

<plugins>
    <plugin>
        <groupId>at.makubi.maven.plugin</groupId>
        <artifactId>avrohugger-maven-plugin</artifactId>
        <executions>
            <execution>
                <phase>generate-sources</phase>
                <goals>
                    <goal>generate-scala-sources</goal>
                </goals>
            </execution>
        </executions>
        <configuration>
            <namespaceMapping>
                <mapping>
                    <from>com.example.packagename</from>
                    <to>com.example.packagenamenew.subchange</to>
                </mapping>
            </namespaceMapping>
            <fileIncludes>
                <fileInclude>
                    <path>subdir/**</path>
                    <matchSyntax>GLOB</matchSyntax>
                </fileInclude>
            </fileIncludes>
        </configuration>
    </plugin>
</plugins>

Dependencies

This plugin heavily relies on Avrohugger to generate Scala code.

Contributors

License

The Avrohugger Maven Plugin is released under version 2.0 of the Apache License.

About

Maven plugin for generating Scala case classes and ADTs from Apache Avro schemas, datafiles, and protocols

Resources

License

Stars

Watchers

Forks

Packages

No packages published