博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Maven的profile文件过滤引起的字符编码BUG
阅读量:6243 次
发布时间:2019-06-22

本文共 1195 字,大约阅读时间需要 3 分钟。

本文记录了一次文件编码差异引起的profile替换占位符失败的bug,及处理思路。记录成文,以便以后反思,或让后来遇到问题的同学能有据可循。

起因及bug描述

相信大家对于Maven中打包不同环境使用不同profile文件的做法已经很熟悉了。我所在的项目分了好多个profile,每个profile对应不同的properties,如下图:

多个properties

在开发的过程中,出现其中某几个properties编译打包出来的工程,占位符没有被替换,但是其他的properties则没有问题。war包中的配置文件中还是会有${xxx.xxx.xxx}的字符。

多个properties

处理思路

  • 首先排除了编码失误,字符写错等等初级错误
  • 然后我怀疑是maven-resources-plugin插件在filter的过程中出现字符的问题,这个想法是由于在Maven的resource打包过程中,触发resources的filter操作的插件就是maven-resources-plugin,所以出问题一定是在这个插件的工作过程中,查看Maven的package过程日志,如下图:
    maven-resources-plugin的工作日志

日志提示使用UTF-8的编码格式,拷贝了16个经过filter操作的resource文件。然后排除了properties文件中的中文干扰,但是依然没有解决问题,Maven打包后依然是那几个properties没有有效的替换占位符。

  • 暂时没有其他解决思路,只能逐字逐字的对比能成功替换占位符的properties和不能成功替换占位符的properties。还用上了各种对比工具。结局依然是没有发现什么异常的地方。

文件字符的对比

  • 确定字符没问题后,怀疑是文件本身的问题。复制正常和异常两种properties文件,修改名字,修改properties里面的内容信息。打包测试。测试的结果是,能正常替换占位符的properties复制出来的都能够正常替换占位符,反之不能正确替换占位符的properties复制出来的都不能正常替换占位符。由此可见,这两个properties可能在存档的时候就存在差异。从IDE里复制异常的properties中的字符,到记事本里保存到本地,果然是存档时的编码有问题,而IDE没有提示这个问题。

异常的字符

  • 最后替换了有异常编码的字符,就能成功打包替换了。

小结

在排除了大部分低级错误后,不要盲目进行没有必要的盲目测试,投石问路虽然是不错的方法,但是在排除bug时,一步一步的投石问路未免太过耗时。比方说在这次的bug解决中,在排除了大部分低级错误后,不应盲目进行测试,妄图以此找到解决问题的办法,而应该站在更高层次的角度来看待问题出现的缘由。所以在以后的编码学习过程中,应该加强自己的逻辑思维能力,提高分析解决问题的能力。

转载地址:http://uppia.baihongyu.com/

你可能感兴趣的文章
idea下maven项目,样式css、js更新后,页面不显示更新内容
查看>>
bzoj 1001 平面图转对偶图 最短路求图最小割
查看>>
php 记住密码自动登录
查看>>
NSThread创建线程的三种方法
查看>>
Logger.getLogger与LogFactory.getLog
查看>>
HDU4671 Backup Plan(构造序列-多校七)
查看>>
一些难得一见的代码问题
查看>>
Read–eval–print loop
查看>>
如果我是面试官 我要出什么题目(常更新)
查看>>
初识nginx
查看>>
React Native
查看>>
最优化
查看>>
HDU1495 非常可乐
查看>>
CCF NOI1071 Pell数列
查看>>
Studio快捷键
查看>>
75. Sort Colors(按颜色进行排序)(leetcode)
查看>>
4_文件与目录权限
查看>>
SQLServer 2008 R2 清空日志文件
查看>>
总结第八天
查看>>
向空对象添加数据以及for in 遍历
查看>>