Avrohugger Maven Plugin
October 3, 2021 ยท View on GitHub
Maven plugin for generating Scala case classes and ADTs from Apache Avro schemas, datafiles, and protocols.
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
- List of paths to be included in generation
- fileInclude elements consist of
- path: The path to be included
- matchSyntax: STRING, GLOB or REGEX
- Paths are relative to the sourceDirectory
- An empty list is overwritten with the default setting
- For GLOB see https://docs.oracle.com/javase/7/docs/api/java/nio/file/FileSystem.html#getPathMatcher(java.lang.String)
- Defaults to FileInclude("**", GLOB) which includes all files
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
JavaTimeInstantorJavaSqlTimestamp
- timestampMillisType - possible values are
- Complex
- 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.