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

Maven 3.9.1构建失败:二进制文件过滤触发MalformedInputException

问题分析

Maven 3.9.x 对maven-resources-plugin的默认配置做了调整,默认会对所有资源文件启用过滤逻辑,包括二进制文件(比如图片、jar包、二进制配置文件等)。而过滤逻辑是基于文本编码解析文件内容的,二进制文件包含非文本编码的字节,因此触发MalformedInputException错误。

解决方案

1. 精准排除二进制文件的过滤

在项目pom.xml中针对maven-resources-plugin配置,明确指定不需要过滤的二进制文件类型:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <version>3.3.0</version>
            <configuration>
                <!-- 根据项目实际二进制文件类型添加扩展名 -->
                <nonFilteredFileExtensions>
                    <nonFilteredFileExtension>png</nonFilteredFileExtension>
                    <nonFilteredFileExtension>jpg</nonFilteredFileExtension>
                    <nonFilteredFileExtension>gif</nonFilteredFileExtension>
                    <nonFilteredFileExtension>ico</nonFilteredFileExtension>
                    <nonFilteredFileExtension>jar</nonFilteredFileExtension>
                    <nonFilteredFileExtension>zip</nonFilteredFileExtension>
                </nonFilteredFileExtensions>
            </configuration>
        </plugin>
    </plugins>
</build>

该方式仅对文本文件启用过滤,二进制文件直接复制,不会触发编码解析错误。

2. 关闭全局资源过滤(按需使用)

如果项目中没有需要变量替换的文本资源,可直接关闭全局过滤:

<build>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>false</filtering>
        </resource>
    </resources>
</build>

注意:若存在application.properties这类需变量替换的文本文件,此方式会导致变量替换失效,需谨慎使用。

3. 分目录管理资源(推荐跨平台方案)

将文本资源与二进制资源分开存放,例如:

  • src/main/resources/text:存放需过滤的文本文件(如application.properties)
  • src/main/resources/bin:存放二进制文件

然后在pom.xml中分别配置:

<build>
    <resources>
        <!-- 文本资源启用过滤 -->
        <resource>
            <directory>src/main/resources/text</directory>
            <filtering>true</filtering>
        </resource>
        <!-- 二进制资源禁用过滤 -->
        <resource>
            <directory>src/main/resources/bin</directory>
            <filtering>false</filtering>
        </resource>
    </resources>
</build>

此方式逻辑清晰,跨平台兼容性最佳,可彻底避免二进制文件被误处理的问题。

验证

配置完成后执行mvn clean install重新构建,验证错误是否解决。若仍有问题,检查是否遗漏二进制文件扩展名或目录配置是否正确。

内容的提问来源于stack exchange,提问作者Stephen G Tuggy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 12:07:17