CoolProp 是一个开源的能源计算类库 但是其中需要用java原生native方法但是这里就需要一个类库,但是官网上给的类库(.dll)没有加包名,但是其内部编译没带类名称只能在maven仓库下的java包下 但是这样就给我们调用带来了困难 因为如果我们不写包名的话默认本包,给我们调用带来了困难
其解决方法如下
第一个方法:
我们可以用 java的反射机制来调用类下的方法
我只实现了第一个方法,
其源码在csdn的仓库上:
https://codechina.csdn.net/qq_40539437/cloud.git
其代码是
希望可以帮到你
由于官网上下载的只试用于windows,但在linux并不使用,于是我和团队花了1天去搞这个linux上可执行的文件libCoolProp.so
一.打包libCoolProp.so文件
1.下载代码上Coolprop官网下载 仓库上的代码(git clone https://github.com/CoolProp/CoolProp --recursive)详情可以查看官网(http://www.coolprop.org/coolprop/wrappers/Java/index.html)
(注意:如果只下载官网上已经成功打包的zip文件是不行的,因为里面依赖项较多,zip包里有的文件缺失导致编译失败)
2.linux 上需要的环境
cmake、git、g++、p7Zip、libpython-dev(版本大于等于2.7)、swig、python-six(版本与libpython-dev一致(差不多))、JDK
3.在下载CoolProp的文件夹下创建build文件夹
mkdir -p CoolProp/build && cd CoolProp/build
4.在build文件夹下用cmake 执行makefile文件对项目进行构建
cmake .. -DCOOLPROP_JAVA_MODULE=ON -DBUILD_TESTING=ON -DCMAKE_BUILD_TYPE=Release
5.对项目进行打包 之后在build文件夹下就会出现.so文件
cmake --build .
二.在Docker上部署服务(采用DockerFile的形式)
1.准备相关的配置文件(*.yml,编译好的jar包,Dockerfile,Dockerfile.jc)
(1)*.yml就是项目的配置文件
(2)编译好的jar包就是项目的jar包
(3)DockerFile
FROM 600ly/jre8-with-gcc:0.1
RUN mkdir /app && mkdir /cfg
COPY ./包名.jar /app/app.jar
COPY ./application.yml /app/application.yml
COPY ./application-druid.yml /app/application-druid.yml
COPY ./libCoolProp.so /usr/lib/libCoolProp.so
RUN chmod -R 0666 /app && chmod -R 0666 /cfg
################################
EXPOSE 8083
WORKDIR /app
CMD ["java", "-jar", "./app.jar"]
(4)Dockerfile.jc
FROM gmaslowski/jre:8
RUN apk add --no-cache g++
2.构建项目依赖
sudo docker build -t 600ly/jre8-with-gcc:0.1 -f ./Dockerfile.jc .
3.构建项目
sudo docker build -t esifs:0.1 .
4.运行项目
sudo docker run --name=esifs-test -d -p 21621:8083 esifs:0.1
5.查看日志
sudo docker logs -f esifs-test
三、需要注意的
在windows上用的是官网上直接下载的CoolProp.dll文件
而在linux上用的是libCoolProp.so文件
两者的差别很大
Windows:直接静态初始化lib下CoolProp.dll文件即可
Linux:
1.在java代码中虽然我们生成的文件是libCoolProp.so但是静态引用的名字必须是CoolProp
2.在构建的时候要把libCoolProp.so文件放到容器内部的/usr/lib下