springboot项目接入sap与部署到docker遇到的问题实录

前言

本文例子来源于某个业务团队,本文主要记录在协助他们部署接入sap遇到的问题,且只记录解决问题的答案,不说明原理。

问题实录

1、问题一:Illegal JCo archive "sapjco-1.0.jar". It is not allowed to rename or repackage the original archive "sapjco3.jar"

解决方案一:手动项目中将sapjco-1.0.jar重名为sapjco3.jar

不过我们没采用这种方案

解决方案二:指定maven的scope为system,形如下

1 <dependency> 2 <groupId>com.sap</groupId> 3 <artifactId>sapjco</artifactId> 4 <version>${sap.version}</version> 5 <scope>system</scope> 6 <systemPath>${project.basedir}/lib/sapjco3.jar</systemPath> 7 </dependency>

然后指定resources,形如下

1<build> 2 <plugins> 3 <plugin> 4 <groupId>org.springframework.boot</groupId> 5 <artifactId>spring-boot-maven-plugin</artifactId> 6 <version>${spring-boot.version}</version> 7 <executions> 8 <execution> 9 <goals> 10 <goal>repackage</goal> 11 </goals> 12 </execution> 13 </executions> 14 </plugin> 15 <plugin> 16 <artifactId>maven-compiler-plugin</artifactId> 17 <configuration> 18 <source>1.8</source> 19 <target>1.8</target> 20 <encoding>UTF-8</encoding> 21 <compilerArguments> 22 <extdirs>${project.basedir}/lib</extdirs> 23 </compilerArguments> 24 </configuration> 25 </plugin> 26 27 </plugins> 28 29 <resources> 30 <resource> 31 <directory>${project.basedir}/lib</directory> 32 <targetPath>BOOT-INF/lib/</targetPath> 33 <includes> 34 <include>**/*.jar</include> 35 </includes> 36 </resource> 37 <resource> 38 <directory>${project.basedir}/lib</directory> 39 <targetPath>BOOT-INF</targetPath> 40 <includes> 41 <include>**/*.so</include> 42 <include>**/*.dll</include> 43 </includes> 44 </resource> 45 <resource> 46 <directory>src/main/resources</directory> 47 <!--<targetPath>BOOT-INF/classes/</targetPath>--> 48 <includes> 49 <include>**/*.yml</include> 50 <include>**/*.xml</include> 51 </includes> 52 </resource> 53 </resources> 54 </build>

这个的作用是将sapjco3.jar打进BOOT-INF/lib/

问题二:java.lang.UnsatisfiedLinkError: no sapjco3 in java.library.path

因为项目是部署到docker里面去,因此本文只写基于docker的解决方案

解决方案如下:

在dockerFile里面指定LD_LIBRARY_PATH环境变量,形如下

1FROM adoptopenjdk/openjdk8 2VOLUME /tmp 3#ENV JAVA_OPTS="-Dcom.sun.management.jmxremote.port=39083 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false" 4ENV JAVA_OPTS="" 5ENV LD_LIBRARY_PATH /usr/local/lib:$LD_LIBRARY_PATH 6COPY localtime /etc/localtime 7RUN echo "Asia/Shanghai" > /etc/timezone 8COPY hello-biz/target/hello-biz-*.jar app.jar 9COPY hello-biz/lib/libsapjco3.so /usr/local/lib/libsapjco3.so 10ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]

总结

本来不想写这篇,但从业务团队那边了解到,他们当时百度了很久都没找到合适的答案。因此就记录下这篇文章,看下能否对有遇到此问题的朋友提供一点解决思路

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

java将前端的json数组字符串转换为列表

记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang