博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
maven打包二进制文件
阅读量:5119 次
发布时间:2019-06-13

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

用java做数据挖掘的时候,保存一个模型文件用java序列化成一个对象文件,在用maven打包的时候遇到些问题.

一是做个记录,二是可以帮助大家少走些弯路.

一.找不到文件

  maven打包路径问题,首先遇到的问题就是,打包后找不到模型文件,模型文件保存在maven工程里的resources

目录中,路径是resource的相对路径,写单元测试的时候报FileNotFoundException

原因是项目中部署中添加了

${basedir}/src/main/resources
true

filtering为true,由于是war工程出,maven编译的时候会将resources目录下的文件拷贝到webapp/WEB-INF下的classes目录中,

导致resources相对路径中找不到文件.

解决方法:使用类加载器找文件位置

LoadModel.class.getClassLoader().getResource("*.model").getPath();

 

 

二.文件反序列化报错

  通过上一步找到了文件,但是在打包后,测试又报错

可以看出文件是找到了,却报invaild stream header:EFBFBDEF错误,但是把原文件拷贝覆盖编译过的模型文件,测试是正确的这个错误原因是war工程里,

通过第一步配置将resources目录文件拷贝到classes目录的时候maven会对文件进行过滤,更深成的原因好像是编译的时候会进行utf-8编码,导致文件无法

正确反序列化,这个解决办法找到两种:

1.在build中添加<nonFileredFileExtensions>将二进制文件,比如图片格式的文件,指定不要过滤

...
org.apache.maven.plugins
maven-resources-plugin
3.0.1
...
pdf
swf
...
...
...

可以看一下官方的说明: http://maven.apache.org/plugins/maven-resources-plugin/examples/binaries-filtering.html

 2.在resources拷贝的时候可以将图片类的二进制文件与配置文件区分开,因为我添加的是model后缀的二进制文件,我的配置如下:

${basedir}/src/main/resources
true
**/*.model
${basedir}/src/main/resources
false
**/*.model

这样可以使二进制文件不被maven过滤转码.

 

 

三.读取不到jar包里的文件

单元测试成功变green bar,项目打包上传到测试环境,结果还是读取不到模型文件,原因是文件打包后都在jar文件里,

无法直接读取jar包里的文件类型数据.

解决方法:通过类加载器读取文件.这个网上有很多说明.

InputStream in=LoadModel.class.getClassLoader().getResourceAsStream("LRModelForAD.model");

 这个测试有效,另一种读取方式是class.getclass().getresources("")得到一个FileUrl,但是我测试却报空指针异常,

以后有机会在验证.

 

欢迎指正.

转载于:https://www.cnblogs.com/xmeo/p/6673091.html

你可能感兴趣的文章
前端框架性能对比
查看>>
@property中 retain 详解
查看>>
uva 387 A Puzzling Problem (回溯)
查看>>
12.2日常
查看>>
同步代码时忽略maven项目 target目录
查看>>
MVC.NET:提供对字体文件.woff的访问
查看>>
Oracle中包的创建
查看>>
团队开发之个人博客八(4月27)
查看>>
发布功能完成
查看>>
【原】小程序常见问题整理
查看>>
C# ITextSharp pdf 自动打印
查看>>
【Java】synchronized与lock的区别
查看>>
django高级应用(分页功能)
查看>>
【转】Linux之printf命令
查看>>
关于PHP会话:session和cookie
查看>>
Chrome development tools学习笔记(3)
查看>>
软件过程的守护神
查看>>
NAT配置
查看>>
【翻译】Brewer's CAP Theorem CAP定理
查看>>
undefined与null
查看>>