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

Maven发布因本地修改失败:自动生成Avro文件排除无效求助

解决Maven Release因自动生成Avro文件触发本地修改检测失败的问题

问题背景

通过Jenkins流水线执行Maven发布,使用的共享流水线命令参数如下:

mvn release:prepare release:perform '-Dgoals=deploy -DpushChanges=false -DlocalCheckout=true -DpreparationGoals=initialize' '-Darguments="-Dmaven.javadoc.skip=true -Dskip.master=true"' '-DtagNameFormat="@{project.version}"' '-Dresume=false'

发布阶段失败,报错显示自动生成的Avro文件被检测为本地修改:

Failed to execute goal org.apache.maven.plugins:maven-release-plugin:2.5.3:prepare (default-cli) on project myProject: Cannot prepare the release because you have local modifications :
[myProject/src/main/java/com/schema/avro/GlobalLinePlanStyle.java:modified]

该文件由Avro Maven插件自动生成,插件配置将输出目录设为src/main/java;尝试在maven-release-plugin中配置checkModificationExcludes排除该文件,但未生效。

解决方案

1. 修正checkModificationExcludes的路径配置

release插件的排除路径需基于项目根目录的相对路径,之前的配置缺少前缀导致匹配失败。修改配置为:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-release-plugin</artifactId>
    <version>2.5.3</version>
    <configuration>
        <checkModificationExcludes>
            <checkModificationExclude>src/main/java/com/schema/avro/GlobalLinePlanStyle.java</checkModificationExclude>
            <!-- 或用通配符匹配所有Avro生成文件 -->
            <!-- <checkModificationExclude>**/com/schema/avro/*.java</checkModificationExclude> -->
        </checkModificationExcludes>
    </configuration>
</plugin>

2. 调整Avro插件输出目录(推荐方案)

将自动生成的文件放到target目录(Maven默认生成文件目录),避免被Git和release插件追踪。修改Avro插件配置:

<plugin>
    <groupId>org.apache.avro</groupId>
    <artifactId>avro-maven-plugin</artifactId>
    <version>${avro.version}</version>
    <configuration>
        <sourceDirectory>${project.basedir}/src/main/resources/</sourceDirectory>
        <!-- 修改输出目录到target下 -->
        <outputDirectory>${project.build.directory}/generated-sources/avro</outputDirectory>
        <fieldVisibility>PRIVATE</fieldVisibility>
        <includes>
            <include>**/*.avsc</include>
        </includes>
    </configuration>
    <executions>
        <execution>
            <phase>generate-sources</phase>
            <goals>
                <goal>schema</goal>
            </goals>
        </execution>
    </executions>
</plugin>

同时添加maven-compiler-plugin配置,让编译器识别生成的文件:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>${maven-compiler-plugin.version}</version>
    <configuration>
        <source>${java.version}</source>
        <target>${java.version}</target>
        <includes>
            <include>**/*.java</include>
        </includes>
        <generatedSourcesDirectory>${project.build.directory}/generated-sources</generatedSourcesDirectory>
    </configuration>
</plugin>

3. 在release命令中直接指定排除参数

若pom配置无法生效,可在Jenkins的mvn命令中直接追加排除参数:

mvn release:prepare release:perform '-Dgoals=deploy -DpushChanges=false -DlocalCheckout=true -DpreparationGoals=initialize' '-Darguments="-Dmaven.javadoc.skip=true -Dskip.master=true"' '-DtagNameFormat="@{project.version}"' '-Dresume=false' '-DcheckModificationExcludes=src/main/java/com/schema/avro/GlobalLinePlanStyle.java'

4. 临时跳过修改检查(不推荐)

若以上方案无法快速解决,可临时添加参数跳过所有本地修改检查,但此操作会忽略真实的本地修改风险,仅作应急使用:

mvn release:prepare release:perform '-Dgoals=deploy -DpushChanges=false -DlocalCheckout=true -DpreparationGoals=initialize' '-Darguments="-Dmaven.javadoc.skip=true -Dskip.master=true"' '-DtagNameFormat="@{project.version}"' '-Dresume=false' '-DcheckModifications=false'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 12:51:56