You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从包含Avro schema的公共库直接生成Java .class文件而不生成源码?

Avro Schema公共库直接生成Class文件解决方案

官方原生avro-maven-plugin的schema目标仅支持生成Java源码,本身没有直接输出.class文件的能力,你可以通过以下两种方案实现需求:

方案1:调整现有插件配置(最简便,适配90%以上场景)

你之前的配置把输出目录设为了源码目录src/main/java,才会留下可感知的中间.java文件。仅需修改输出目录为Maven构建的临时生成目录,即可实现代码仓库无中间Java文件,构建时自动生成、自动编译进最终jar包,全程不需要人工处理中间文件:

<plugin>
    <groupId>org.apache.avro</groupId>
    <artifactId>avro-maven-plugin</artifactId>
    <version>${avro-maven-plugin.version}</version>
    <executions>
        <execution>
            <phase>generate-sources</phase>
            <goals>
                <goal>schema</goal>
            </goals>
            <configuration>
                <sourceDirectory>${project.basedir}/src/main/schemas/</sourceDirectory>
                <!-- 输出到构建临时目录,默认被.gitignore忽略,不会提交到代码库,构建完成后随target目录自动清理 -->
                <outputDirectory>${project.build.directory}/generated-sources/avro</outputDirectory>
            </configuration>
        </execution>
    </executions>
</plugin>

Maven会自动识别${project.build.directory}/generated-sources下的路径为编译源路径,后续compile阶段会自动把生成的.java编译为.class打进最终jar包。如果需要依赖该公共库的其他项目也能读取到原始.avsc文件,可以添加资源目录配置,把schema文件也打进jar包:

<build>
    <resources>
        <resource>
            <directory>src/main/schemas</directory>
            <includes>
                <include>**/*.avsc</include>
            </includes>
        </resource>
    </resources>
</build>

方案2:完全不生成中间.java文件(适合强约束场景)

如果要求构建过程中也不产生任何.java文件,可以直接调用Avro Compiler的API实现字节码直接生成:

  • 引入org.apache.avro:avro-compiler依赖
  • 调用org.apache.avro.compiler.specific.SpecificCompiler的相关编译方法,直接输出字节码到${project.build.directory}/classes目录
  • 可以通过gmavenplus-plugin执行Groovy脚本实现该逻辑,也可以自行开发简易的Maven插件完成。

内容的提问来源于stack exchange,提问作者Omegaspard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 20:06:03