CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/maven-org-apache-avro--avro-compiler

Compilers for Avro IDL and Avro Specific Java API - provides code generation tools for converting Avro schemas and IDL definitions into Java classes

Pending
Overview
Eval results
Files

build-integration.mddocs/

Build Integration

Ant tasks for integrating Avro compilation into build processes, with support for filesets, batch processing, and build system automation.

Capabilities

SchemaTask Class

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;
}

ProtocolTask Class

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;
}

String Type Configuration

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();

Usage Examples

Ant Build File Configuration

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>

Batch Processing with Filesets

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>

Advanced Ant Configuration

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>

Command Line Usage

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 compile

Maven Integration

While 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>

Error Handling

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());
}

Types

/** 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)
}

Integration Notes

  • Tasks automatically handle directory creation for output paths
  • Generated classes follow standard Java package conventions based on Avro namespaces
  • Tasks support incremental compilation - only modified files are recompiled
  • All configuration options from SpecificCompiler can be set through task properties
  • Tasks integrate with Ant's logging system for build output
  • File paths are resolved relative to the Ant project basedir

Install with Tessl CLI

npx tessl i tessl/maven-org-apache-avro--avro-compiler

docs

build-integration.md

configuration.md

index.md

protocol-code-generation.md

schema-code-generation.md

schema-utilities.md

tile.json