Java集成Sap/Erp产生的sapjco包重命名/rename问题及解决方案
背景
公司要从erp拿数, 所以集成一下sapjco3进行连接. 初次集成在本地是没有问题的, 但是打包之后运行会出现
Caused by: java.lang.ExceptionInInitializerError: JCo initialization failed with java.lang.ExceptionInInitializerError: Illegal JCo archive “sapjco3-3.0.17.jar”. It is not allowed to rename or repackage the original archive “sapjco3.jar”.
这个问题是告诉我们不可以重命名这个jar包.
我查询了一下这个问题 原因是因为sap公司不允许进行sapjco3jar包的重命名或者重新打包,并且sap公司的某些客户场景遇到了问题,因此在sapjco3中添加了sapjco3的重命名检查,并将其硬编码到了jar包中, 也就是我们俗称的"写死了"
而我们在打包之后, maven会默认把version放在jar名的后面进行拼接. 所以造成了这个问题.
解决方案
1. 手动重命名
这个解决方案是有点朴实无华了, 但确实有效
你可以在打包过后的jar包中找到lib文件夹并把sapjco3-xxxx.jar重命名成sapjco3.jar或者sapjco3_IDE.jar. 然后保存. 这两个名字都可以解决问题
缺点就是: 你每次打完包都需要重命名, 以后交接文档什么的这一些都要写进去
2. 配置copy插件并指定该包进行stripVersion操作
在sap的官网论坛中我们可以看到, 还是有人不太满意这个手动改名的操作的. 因此他向sap官方提出了疑问
附: sap官网该帖地址
从官方的回答我们也不难看出, 还是有通过maven解决的办法的. 那就是
使用copy插件进行指定的jar包拷贝并在拷贝过程中剥离版本信息
我是maven多模块项目, 个人用这个无效(没用明白)
单项目可以用, 但是对于多模块项目…
我进行了copy的操作, 并保证了这个操作是在repackage操作之前的, 并且把copy操作挂载到了package生命周期, 但是在repackage后的jar包中, 我还是没有见到已经改名的jar包, 所以这个操作我就放弃了.
如果有想试一试的朋友, 我把查询的资料放在这里
https://www.one-tab.com/page/XqJDPdCzTkaRgpJCcE38og
上面放了我在查询过程中感觉可能有用的资料
3. 修改artifactId进行硬编码绕过
这个办法是我感觉目前可用的办法.
先来看一下内部校验
从上面的内部校验可以看到, sap进行了三个校验,分别是名称和前缀的校验
因此我们利用这个办法, 可以进行sap的artifactId改变, 将其前缀变成com.sap.conn.jco.sapjco3, 这样我们就可以绕过限制进行使用了
具体操作方法:
- 利用maven进行jar本地导入
mvn install:install-file -Dfile=地址/sapjco3.jar -DgroupId=com.sap.conn.jco -DartifactId=com.sap.conn.jco.sapjco3 -Dversion=3.0.17 -Dpackaging=jar- 引入pom依赖
- 改完收工
这里还是放一下参考资料:
https://github.com/hibersap/hibersap-sapjco3/issues/1
https://sourceforge.net/p/hibersap/discussion/813164/thread/52913577/#9818
https://hibersap.org/documentation/reference/#the-sap-java-connector-jco
放一下pom配置
到此为止 三个解决方案都已经齐活, 可以进行打包发布了
只不过在linux部署之后还会有其他的问题, 这里篇幅有限, 我写在下一篇吧…
转载请附地址
Java集成Sap/Erp产生的sapjco包重命名/rename问题及解决方案相关推荐
- metrics_FlexyPool如何支持Dropwizard Metrics包重命名
metrics 介绍 FlexyPool严重依赖Dropwizard (以前称为Codahale)度量标准来监视连接池的使用情况 . 集成到Dropwizard中后,程序包名称必然会被重命名 . 因此 ...
- FlexyPool如何支持Dropwizard Metrics包重命名
介绍 FlexyPool严重依赖Dropwizard (以前是Codahale)度量标准来监视连接池的使用情况 . 集成到Dropwizard中后,程序包名称必然会被重命名 . 因此,4.0.0版本将 ...
- idea怎么给包重命名_IntelliJ IDEA 修改包名
1.首先将AndroidManifest的Package Name重命名(快捷键shift+F6或者右键Refctor然后Rename)这时Package Name就改变了,但是Src的文件名还没变 ...
- Java 对象转Json,@JSONField对象字段重命名和顺序问题
一.引入maven依赖 <dependency><groupId>com.alibaba</groupId><artifactId>fastjson&l ...
- java的包资源管理器怎么弄出来_eclipse包资源管理器java项目,包,类重命名 来学习吧...
eclipse包资源管理器java项目,包,类重命名,对于修改已知创建的包(包括java项目,java包)和java类文件的命名非常重要的,有时候你的java包里有多个java文件,你要改名字,可以说 ...
- 如何通过Java批量重命名文件名称
日常生活中,我们需要大量重命名文件名称时,如果手动一个个修改,太过浪费时间,我们可以通过写一个Java类,简单执行来实现批量重命名文件名称,我们先指定需要需要重命名文件的路径,将所有文件读取出来,循环 ...
- Java OA集成SAP BO
SAP BO报表查看需要登录SAP BO系统,为了方便公司希望将BO报表集成到OA系统中,所以参考网上资料加上与SAP BO的顾问咨询整理出一套通过Java来集成SAP BO的功能. SAPBO中的报 ...
- java 集成讯飞语音 pc_【报Bug】sdk集成 讯飞语音输入jar包报错
sdk集成 讯飞语音输入jar包报错 Caused by: org.gradle.api.internal.artifacts.transform.TransformException: Execut ...
- (完美解决)java 集成解决引入百度智能云bos包,出现log4j打印日志过多问题【com.baidubce:api-explorer-sdk】
SDK日志 BOS Java SDK发布版本中增加了logback作为slf4j的实现,如工程中没有自己的实现可以直接用,如果工程中有其他的如log4j则可以替代. 默认日志: 如使用默认的logba ...
最新文章
- 学java为什么要报java培训班?
- 纯IPv6环境App适配的坑
- 96. 不同的二叉搜索树
- 【ZOJ - 3703】Happy Programming Contest(带优先级的01背包,贪心背包)
- java.io.file.sync_Java(25)IO流和File类
- Linux下memcache的安装和启动(很好)
- static变量的作用(转)
- Maven+Eclipse+SparkStreaming+Kafka整合
- Qt加载RGB内存数据,并显示彩色图
- 《神经网络与深度学习》课程笔记(3)-- 神经网络基础之Python与向量化
- windows10防Linux,用户禁用Defender提升Win10 Linux子系统性能
- .NET中代理服务器WebProxy的各种用法
- malloc函数详解
- 如何启用计算机的休眠,电脑休眠
- 【饭谈】那些看似为公司着想,实际却很自私的故事 (一:造轮子)
- Win10任务栏卡死,无响应,一直转圈,点不动
- 我的 Typora IDEA 雅黑主题
- 《城市大脑系列建设标准规范》立项评审会胜利召开
- 小米文件管理连接服务器,小米文件管理器中的远程管理无法连接解决方法
- 文本对比。文本编辑距离算法
热门文章
- 知网论文 caj 转 pdf 方法【带目录且文字可选的pdf,非图片】
- LoadRunner监控Oracle
- HCIA——TCP及其三次握手,问题
- Android 8.1 第三方apk通过数据库调用系统定时开关机功能
- useradd与adduser(更全面)创建用户命令 和 让用户拥有root权限
- 华为视频会议终端9039s开机自动入会
- 红外热成像仪原理与用途——TFN TD97 双目手持热像仪红外夜视仪
- 忘记apusic应用服务器web控制台admin密码怎么办?
- 虚拟机的特点,什么是虚拟机
- noip c语言算法教学视频,信息学奥赛课课通(C++)课程视频课程课件与代码