当前位置: 首页 > news >正文

springboot 打包 failed with MalformedInputException: Input length = 1

MalformedInputException: Input length = 1 是 Spring Boot 项目在打包时常见的错误,通常是由于资源文件(如 .properties.yml 或其他文本文件)的编码问题导致的。Maven 在读取这些文件时,如果文件的编码与预期的编码(通常是 UTF-8)不匹配,就会抛出此异常。

以下是解决该问题的详细步骤:


1. 检查文件编码

  • 确保 src/main/resources 目录下的所有文件都使用 UTF-8 编码
  • 如果你使用的是 IDE(如 IntelliJ IDEA 或 Eclipse),可以按照以下步骤检查和修改文件编码:
    • IntelliJ IDEA:
      1. 打开 File > Settings > Editor > File Encodings
      2. Global EncodingProject EncodingDefault Encoding for properties files 都设置为 UTF-8
      3. 重新保存文件。

2. pom.xml 中配置编码(我在这一步就解决了问题)

pom.xml 中明确指定资源文件的编码为 UTF-8。修改 <build> 部分如下:

<build>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering> <!-- 如果需要过滤 -->
            <encoding>UTF-8</encoding>
        </resource>
    </resources>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <version>3.3.1</version> <!-- 使用最新版本 -->
            <configuration>
                <encoding>UTF-8</encoding>
            </configuration>
        </plugin>
    </plugins>
</build>

这样可以确保 Maven 在打包时使用 UTF-8 编码处理资源文件。


3. 排除非 UTF-8 编码的文件

如果某些文件无法转换为 UTF-8 编码(例如二进制文件),可以在 pom.xml 中排除这些文件:

<resources>
    <resource>
        <directory>src/main/resources</directory>
        <excludes>
            <exclude>**/*.bin</exclude> <!-- 示例:排除二进制文件 -->
        </excludes>
        <filtering>true</filtering>
        <encoding>UTF-8</encoding>
    </resource>
</resources>

4. 禁用过滤

如果问题是由于资源过滤(例如 ${variable} 占位符)引起的,可以尝试禁用过滤:

<resources>
    <resource>
        <directory>src/main/resources</directory>
        <filtering>false</filtering> <!-- 禁用过滤 -->
        <encoding>UTF-8</encoding>
    </resource>
</resources>

如果只需要对某些文件启用过滤,可以单独配置:

<resources>
    <resource>
        <directory>src/main/resources</directory>
        <filtering>true</filtering>
        <includes>
            <include>**/*.properties</include> <!-- 仅对 properties 文件启用过滤 -->
        </includes>
        <encoding>UTF-8</encoding>
    </resource>
    <resource>
        <directory>src/main/resources</directory>
        <filtering>false</filtering> <!-- 对其他文件禁用过滤 -->
        <excludes>
            <exclude>**/*.properties</exclude>
        </excludes>
        <encoding>UTF-8</encoding>
    </resource>
</resources>

5. 转换文件编码

如果某些文件不是 UTF-8 编码,可以使用工具将其转换为 UTF-8:

  • 使用文本编辑器(如 Notepad++ 或 VS Code)打开文件,然后选择 Save with Encoding > UTF-8
  • 使用命令行工具 iconv 转换编码:
    iconv -f ISO-8859-1 -t UTF-8 inputfile.properties -o outputfile.properties
    

6. 检查特殊字符

如果资源文件中包含特殊字符(如非 ASCII 字符),确保它们被正确转义。例如,在 .properties 文件中,可以使用 Unicode 转义序列:

greeting=\u4F60\u597D

7. 更新 Maven 和插件版本

确保你使用的是最新版本的 Maven 和 maven-resources-plugin。在 pom.xml 中更新插件版本:

<properties>
    <maven-resources-plugin.version>3.3.1</maven-resources-plugin.version>
</properties>
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <version>${maven-resources-plugin.version}</version>
        </plugin>
    </plugins>
</build>

8. 清理并重新构建

完成上述修改后,运行以下命令清理并重新构建项目:

mvn clean install

9. 调试模式

如果问题仍然存在,可以使用 Maven 的调试模式查看详细错误信息:

mvn clean install -X

检查日志中是否有具体的文件路径和行号,找到导致问题的文件。


通过以上步骤,你应该能够解决 MalformedInputException: Input length = 1 的问题。如果问题仍未解决,请提供更多错误日志或配置信息,我可以进一步帮助你排查问题!

http://www.dtcms.com/a/79973.html

相关文章:

  • SaaS系统的销售微服务与权限微服务边界设计
  • 湖仓一体:数据湖与数据仓库的融合模式解析
  • 算法系列——有监督学习——3.逻辑回归
  • 现代时尚标签海报包装网站设计几何风PSAI无衬线英文字体安装包 Matahari Sans Font Family
  • 【linux】统信操作系统修改默认编辑模式从nano改为vim
  • Q2流动式起重机司机考试模拟题库
  • 耘想Android NAS 用户权限设置说明书
  • SQL 中 WHERE 与 HAVING 子句的使用
  • 一些关于瓶装燃气送气工考试的常见考点
  • Spring MVC 参数校验-校验注解
  • Asahi Linux 核心开发者暂停苹果 GPU Linux 驱动开发工作
  • GGUF、Transformer、AWQ 详解与关系梳理
  • 【最新版0.47.8】Cursor下载安装教程
  • iPhone 16怎么编辑图片?图片编辑技巧、软件分享
  • [Xilinx]工具篇_PetaLinux自动编译
  • 全面解析软件开发流程与工具对比
  • Evo2:跨所有生命领域的基因组建模与设计
  • 利用Linux的I2C子系统和i2c-tools工具集写出的对I2C设备AP3216C读写的应用程序
  • Python Cookbook-4.8 二维阵列变换
  • ZooKeeper集群高可用性测试与实践:从规划到故障模拟
  • 单片机flash存储也做磨损均衡
  • 分布式训练与多GPU加速策略
  • 创造型设计模式
  • IP查询底层逻辑解析:数据包与地理位置
  • 【虚幻引擎UE5】SpawnActor生成Character实例不执行AI Move To,未初始化AIController的原因和解决方法
  • 嵌入式4-Modbus
  • 网络类型及数据链路层协议【复习篇】
  • MySQL身份验证的auth_socket插件
  • 使用 `pytest` 框架时,可以通过极限封装将 YAML 文件的读取、解析
  • Kotlin v2.1.20 发布,标准库又有哪些变化?