Maven镜像打包war文件中中文文件名无法生成的问题

本文记录了在使用基于Alpine的Maven镜像打包时,遇到war文件中不包含中文文件名的问题。经过排查,发现是由于Alpine使用MUSL libc而Oracle JDK 7u79依赖GNU Libc导致的冲突。通过切换到基于CentOS的镜像,问题得到解决。总结指出,这是locale设置问题,且Alpine与Oracle JDK的libc兼容性需注意。
摘要由CSDN通过智能技术生成

今天碰到一个的小问题,虽然内容非常简单,但是较为有趣,简单memo一下。

现象

Maven镜像进行war包的生成,结果发现如果webapp/WEB-INF下如果有中文文件名的话,打包生成的war文件中不包含此文件。

  • Maven镜像Base:Alpine镜像
  • Java: Oracle JDK 7u79
  • Maven: 3.2.5

原因确认

按照如下方式,逐渐定位。开始以为是文件编码方式,将JVM和Java和Maven中关于文件编码相关的设定以及Maven的Platform encoding等各种组合设定方式试验了一遍,发现均无法解决问题,既然不能直接定位,于是使用了最笨的方法进行替换排除。

  • 同样设定,不使用镜像: OK
  • 镜像方式,JDK8: OK
    于是初步确认应该是镜像问题,然后发现Locale设定出现问题,无法轻易设定,进而终于发现关键问题点:
  • Alpine镜像中缺省使用MUSL libc
  • Oracle的JDK使用GNU Libc
    进而发现果然此Alpine版中的jdk的环境是带伤的
    在这里插入图片描述

暂定解决方案

旧版的JDK的镜像做起来非常繁琐,需要手动下载然后本地管理,上传至github又太大,所以验证直接使用CentOS7.6作为base,问题非常简单地得到了解决。

再现准备

准备如下maven的pom.xml文件以及文件构成即可进行测试,除了pom.xml文件之外,其余均可使用touch只生成无内容的空文件即可

liumiaocn:multibytes liumiao$ cat pom.xml 
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值