打包方式:
cmd命令行-进入项目目录-输入mvn clean -DskipTests package -P dev,是标准的命令行打包方式
报错:
非法字符: ‘\ufeff’ 需要class, interface或enum。
报错的文件是一个公用包里的一个class,是datasource的,文件名是DataSourceContextHolder.class,一开始我还以为是pom文件里的dev这个profile有问题,
在检查了一遍之后,发现还真有问题,修改完成后再次打包,发现还是一样的报错。反复确认pom profile没有问题之后,只能求助BD。
问题的解决方法很简单,在项目路径下找到报错的这个文件DataSourceContextHolder.class,用nodpad++打开。
然后在上方菜单栏找到Encoding,然后你会发现这个文件是UTF8-BOM,把他修改为UTF-8(去掉BOM),保存退出,就可以解决问题了。
我的eclipse的编码格式毫无疑问是UTF-8的
那么为什么会有一个文件变成了UTF8-BOM呢,其他的为数众多的java文件怎么就不是UTF-BOM,单单就那一个。
BOM: browser object model即浏览器对象模型,整个 BOM 的核心对象就是 window 对象,它代表的是浏览器的一个实例。
关于utf-8编码的txt文件,windows以记事本方式保存时会在第一行最开始处自动加入bom格式的相关信息,大概三个字节
如果是按照上述书法,txt存储就会加入bom格式的话,也说不通,因为那么多的文件
在目录下都是以txt保存的,但是我只修改了DataSourceContextHolder这一个文件。打开了隔壁的文件,发现编码是UTF8并不是UTF-BOM。
我发现一个细节的地方,就是这三个文件中,dataSourceAspect和DynamicDataSource的创建时间是一致的,都是11/16 11:19,但是DataSourceContextHolder是不一样的,并不是指上图的11/19 14:57,这只是我修改编码的时间,而是创建时间本身也跟另外两个文件不同
同样都是公用包里的公用类,都是在项目建立初就复制过来的,现在产生了差异,那就只能是编译,也就是说DataSoourceContextHolder这个文件,被