Java集成Sap/Erp产生的sapjco包重命名/rename问题及解决方案

在Java项目中集成Sapjco3时,遇到打包后由于jar包名包含版本号导致初始化失败的问题。解决方案包括手动重命名jar包、配置maven copy插件剥离版本信息(对多模块项目无效)、修改artifactId以硬编码方式绕过校验。详细步骤和参考资料已提供。

背景

公司要从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进行了三个校验,分别是名称和前缀的校验

因此我们利用这个办法, 可以进行sap的artifactId改变, 将其前缀变成com.sap.conn.jco.sapjco3, 这样我们就可以绕过限制进行使用了

具体操作方法:

  1. 利用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
  2. 引入pom依赖
  3. 改完收工

这里还是放一下参考资料:

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配置pom配置
到此为止 三个解决方案都已经齐活, 可以进行打包发布了

只不过在linux部署之后还会有其他的问题, 这里篇幅有限, 我写在下一篇吧…

转载请附地址

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值