/avrohugger-maven-plugin

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

Primary LanguageJavaApache License 2.0Apache-2.0

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.