Compilers for Avro IDL and Avro Specific Java API - provides code generation tools for converting Avro schemas and IDL definitions into Java classes
—
Ant tasks for integrating Avro compilation into build processes, with support for filesets, batch processing, and build system automation.
Ant task for compiling Avro schema files to Java classes during the build process.
/**
* Ant task to generate Java interface and classes for a protocol.
* Extends ProtocolTask to inherit common functionality.
*/
public class SchemaTask extends ProtocolTask {
/**
* Command-line interface for schema compilation
* @param args Command line arguments: <schema.avsc>... <output-folder>
* @throws IOException if compilation fails
*/
public static void main(String[] args) throws IOException;
/**
* Compile schema file - overrides parent implementation
* @param src Source schema file
* @param dest Destination directory
* @throws IOException if compilation fails
*/
@Override
protected void doCompile(File src, File dest) throws IOException;
}Base Ant task for compiling Avro protocol files to Java classes.
/**
* Ant task to generate Java interface and classes for a protocol.
* Extends org.apache.tools.ant.Task.
*/
public class ProtocolTask extends Task {
/** Set the schema/protocol file */
public void setFile(File file);
/** Set the output directory */
public void setDestdir(File dir);
/** Set string type for generated classes (CharSequence, String, Utf8) */
public void setStringType(GenericData.StringType stringType);
/** Add fileset for batch processing */
public void addFileSet(FileSet set);
/** Execute the ant task */
@Override
public void execute() throws BuildException;
/**
* Compile protocol file - can be overridden by subclasses
* @param src Source protocol file
* @param dest Destination directory
* @throws IOException if compilation fails
*/
protected void doCompile(File src, File dest) throws IOException;
}Control how strings are represented in generated Java classes.
/**
* Set string type for generated classes
* @param stringType String representation type
* Options: CharSequence (default), String, Utf8
*/
public void setStringType(GenericData.StringType stringType);
/** Get current string type setting */
public GenericData.StringType getStringType();Configure Avro compilation in your build.xml:
<!-- Load Avro compiler tasks -->
<taskdef name="schema" classname="org.apache.avro.compiler.specific.SchemaTask"
classpath="path/to/avro-compiler.jar"/>
<taskdef name="protocol" classname="org.apache.avro.compiler.specific.ProtocolTask"
classpath="path/to/avro-compiler.jar"/>
<!-- Compile single schema -->
<target name="compile-schema">
<schema file="src/main/avro/User.avsc"
destdir="src/main/java"/>
</target>
<!-- Compile single protocol -->
<target name="compile-protocol">
<protocol file="src/main/avro/EmailService.avpr"
destdir="src/main/java"/>
</target>Compile multiple files using Ant filesets:
<!-- Compile all schemas in a directory -->
<target name="compile-all-schemas">
<schema destdir="src/main/java">
<fileset dir="src/main/avro">
<include name="**/*.avsc"/>
</fileset>
</schema>
</target>
<!-- Compile all protocols in a directory -->
<target name="compile-all-protocols">
<protocol destdir="src/main/java">
<fileset dir="src/main/avro">
<include name="**/*.avpr"/>
</fileset>
</protocol>
</target>Configure string types and complex file patterns:
<!-- Configure string type -->
<target name="compile-with-string-type">
<schema destdir="src/main/java" stringType="String">
<fileset dir="src/main/avro">
<include name="**/*.avsc"/>
</fileset>
</schema>
</target>
<!-- Complex build with dependencies -->
<target name="generate-avro-classes" depends="clean">
<mkdir dir="src/main/java"/>
<!-- Compile schemas first -->
<schema destdir="src/main/java">
<fileset dir="src/main/avro/schemas">
<include name="**/*.avsc"/>
</fileset>
</schema>
<!-- Then compile protocols that depend on schemas -->
<protocol destdir="src/main/java">
<fileset dir="src/main/avro/protocols">
<include name="**/*.avpr"/>
</fileset>
</protocol>
</target>Use the task classes directly from command line:
# Schema compilation
java -cp avro-compiler.jar org.apache.avro.compiler.specific.SchemaTask \
user.avsc order.avsc product.avsc src/main/java
# The last argument is the output directory
# All preceding arguments are schema files to compileWhile these are Ant tasks, they can be used in Maven via the AntRun plugin:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>3.1.0</version>
<executions>
<execution>
<phase>generate-sources</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<target>
<taskdef name="schema"
classname="org.apache.avro.compiler.specific.SchemaTask"
classpathref="maven.compile.classpath"/>
<schema destdir="${project.build.directory}/generated-sources/avro">
<fileset dir="src/main/avro">
<include name="**/*.avsc"/>
</fileset>
</schema>
</target>
</configuration>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.apache.avro</groupId>
<artifactId>avro-compiler</artifactId>
<version>1.12.0</version>
</dependency>
</dependencies>
</plugin>Build tasks throw BuildException for Ant integration:
try {
ProtocolTask task = new ProtocolTask();
task.setFile(new File("service.avpr"));
task.setDestdir(new File("src/main/java"));
task.execute();
} catch (BuildException e) {
// Handle build failure
System.err.println("Compilation failed: " + e.getMessage());
}/** String type options for generated Java classes */
// From org.apache.avro.generic.GenericData
enum StringType {
CharSequence, // Default - generates CharSequence fields
String, // Generates String fields
Utf8 // Generates Utf8 fields (Avro's internal string type)
}SpecificCompiler can be set through task propertiesInstall with Tessl CLI
npx tessl i tessl/maven-org-apache-avro--avro-compiler