今天碰到一个的小问题,虽然内容非常简单,但是较为有趣,简单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"