背景

公司要从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, 这样我们就可以绕过限制进行使用了

具体操作方法:

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

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

转载请附地址

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

  1. metrics_FlexyPool如何支持Dropwizard Metrics包重命名

    metrics 介绍 FlexyPool严重依赖Dropwizard (以前称为Codahale)度量标准来监视连接池的使用情况 . 集成到Dropwizard中后,程序包名称必然会被重命名 . 因此 ...

  2. FlexyPool如何支持Dropwizard Metrics包重命名

    介绍 FlexyPool严重依赖Dropwizard (以前是Codahale)度量标准来监视连接池的使用情况 . 集成到Dropwizard中后,程序包名称必然会被重命名 . 因此,4.0.0版本将 ...

  3. idea怎么给包重命名_IntelliJ IDEA 修改包名

    1.首先将AndroidManifest的Package Name重命名(快捷键shift+F6或者右键Refctor然后Rename)这时Package Name就改变了,但是Src的文件名还没变 ...

  4. Java 对象转Json,@JSONField对象字段重命名和顺序问题

    一.引入maven依赖 <dependency><groupId>com.alibaba</groupId><artifactId>fastjson&l ...

  5. java的包资源管理器怎么弄出来_eclipse包资源管理器java项目,包,类重命名 来学习吧...

    eclipse包资源管理器java项目,包,类重命名,对于修改已知创建的包(包括java项目,java包)和java类文件的命名非常重要的,有时候你的java包里有多个java文件,你要改名字,可以说 ...

  6. 如何通过Java批量重命名文件名称

    日常生活中,我们需要大量重命名文件名称时,如果手动一个个修改,太过浪费时间,我们可以通过写一个Java类,简单执行来实现批量重命名文件名称,我们先指定需要需要重命名文件的路径,将所有文件读取出来,循环 ...

  7. Java OA集成SAP BO

    SAP BO报表查看需要登录SAP BO系统,为了方便公司希望将BO报表集成到OA系统中,所以参考网上资料加上与SAP BO的顾问咨询整理出一套通过Java来集成SAP BO的功能. SAPBO中的报 ...

  8. java 集成讯飞语音 pc_【报Bug】sdk集成 讯飞语音输入jar包报错

    sdk集成 讯飞语音输入jar包报错 Caused by: org.gradle.api.internal.artifacts.transform.TransformException: Execut ...

  9. (完美解决)java 集成解决引入百度智能云bos包,出现log4j打印日志过多问题【com.baidubce:api-explorer-sdk】

    SDK日志 BOS Java SDK发布版本中增加了logback作为slf4j的实现,如工程中没有自己的实现可以直接用,如果工程中有其他的如log4j则可以替代. 默认日志: 如使用默认的logba ...

最新文章

  1. 学java为什么要报java培训班?
  2. 纯IPv6环境App适配的坑
  3. 96. 不同的二叉搜索树
  4. 【ZOJ - 3703】Happy Programming Contest(带优先级的01背包,贪心背包)
  5. java.io.file.sync_Java(25)IO流和File类
  6. Linux下memcache的安装和启动(很好)
  7. static变量的作用(转)
  8. Maven+Eclipse+SparkStreaming+Kafka整合
  9. Qt加载RGB内存数据,并显示彩色图
  10. 《神经网络与深度学习》课程笔记(3)-- 神经网络基础之Python与向量化
  11. windows10防Linux,用户禁用Defender提升Win10 Linux子系统性能
  12. .NET中代理服务器WebProxy的各种用法
  13. malloc函数详解
  14. 如何启用计算机的休眠,电脑休眠
  15. 【饭谈】那些看似为公司着想,实际却很自私的故事 (一:造轮子)
  16. Win10任务栏卡死,无响应,一直转圈,点不动
  17. 我的 Typora IDEA 雅黑主题
  18. 《城市大脑系列建设标准规范》立项评审会胜利召开
  19. 小米文件管理连接服务器,小米文件管理器中的远程管理无法连接解决方法
  20. 文本对比。文本编辑距离算法

热门文章

  1. 知网论文 caj 转 pdf 方法【带目录且文字可选的pdf,非图片】
  2. LoadRunner监控Oracle
  3. HCIA——TCP及其三次握手,问题
  4. Android 8.1 第三方apk通过数据库调用系统定时开关机功能
  5. useradd与adduser(更全面)创建用户命令 和 让用户拥有root权限
  6. 华为视频会议终端9039s开机自动入会
  7. 红外热成像仪原理与用途——TFN TD97 双目手持热像仪红外夜视仪
  8. 忘记apusic应用服务器web控制台admin密码怎么办?
  9. 虚拟机的特点,什么是虚拟机
  10. noip c语言算法教学视频,信息学奥赛课课通(C++)课程视频课程课件与代码