目录
1.打包后无法运行
这个问题实际上应该说是gardle 打包缺失依赖的问题,解决方案是在idea中通过右侧边的标签 gradle-shadow-shadowJar 进行打包,这时候打出来的包会有-all的名称。
2.引用失败
碰到的问题是,在项目中fop可以正确的使用绝对路径引用图片,当将项目用gradle打包后,图片引用失败。查询了资料后,发现问题是因为图片资源应该以uri的形式导入,具体导入格式为
-
url(file:/h:/xxx.jpg)
-
url(file:h:///xxx.jpg)
两种格式,都可以完成图片的引用。
3.依赖冲突
这个问题实际开发中还是比较难以排除的,因为会与另一个问题叠加,导致如果没有每次都看报错信息,都按照找不到图片就会失去方向。
另一个问题的提示类似于
org.apache.xmlgraphics.image.loader.ImageException:
The file format is not supported. No ImagePreloader found
原因是类的重复加载,在项目中使用了gradle作为编辑工具,使用shadow,找到的方案是在build.gradle中加入
shadowJar{
mergeServiceFiles()
}
这样可以解决问题,不了解gradle,推测为合并了冲突的包。maven或其他包管理需要自行处理使用exclude等方式。
4.图片导入提示Vendor==null
导入图片需要依赖fop的图片处理jar包,这个包依赖com.sun.medie.imageioimpl.common.packageUtil.jar,这个包,在项目中直接启动,会依赖于jar包中的描述文件(MANIFEST.MF)进行加载。使用gradle-shadow-shadowJar,方式打包后,会讲jar包直接解压后打入新的jar包,会导致描述文件中可能缺失相关信息,这个时候需要手动加入,格式为
jar{
manifest {
attributes {
"Implementation-Title" :
"Implementation-Vendor" :
"Implementation-Version" :
}
}
}
配置后可以通过获取这三个参数,实例化类。