解决Java 部署Tomcat时使用jni和jna调用DLL文件的问题

我的前一篇博客提到,我们公司项目的restful框架中要用到底层的DLL C++库,最后经过测试验证结果选择采用JNA方法来调DLL库。

之后基础框架在IDEA中的jetty服务中调试成功,但是在部署到Tomcat上时出现了无法加载DLL库的状况,只能现学现卖了。

一. 把DLL文件放在Tomcat下的方法:

在Tomcat中加载dll,供其它接口调用:

在Tomcat目录根下新建一个文件夹,这里就叫DLL吧,<tomcat_home>/DLL;

把需要用到的dll放入新建的DLL目录下;

编辑<tomcat_home>/conf/catalina.properties,在common.loader后面追加${catalina.home}/DLL;

编辑<tomcat_home>/bin/目录下的catalina.bat,在rem Copy CATALINA_BASE from CATALINA_HOME if not defined的段落中增加如下语句:

set LD_LIBRARY_PATH=%CATALINA_BASE%\DLL

set JAVA_OPTS=-Djava.library.path=%CATALINA_BASE%\DLL%JAVA_OPTS%

保存重新启动Tomcat,deploy war即可。

二. 把DLL文件放在java.library.path路径下,可以通过System.out.println(System.getProperty("java.library.path"));语句查看都有哪些系统调默认调用的文件路径。Tomcat会在这些目录下寻找要加载的文件、库等。

三. 在使用JNA调用DLL时,总是提示无法加载相应的库。把DLL文件放在各种路径下都不起作用。

无奈之下,我换成JNI工具尝试了一下,结果提示Can't load IA 32-bit .dll on a AMD 64-bit platform。真相终于浮出了水面,原来是因为JDK和DLL系统不兼容(万万没想到问题出在这里),于是我把DLL重新编译成64位试了一下,成功部署。

然后我又换成JNA工具后试了一下也成功部署(早该换成JNI试一下,就是因为JNI使用步骤过于繁琐,所以一直对JNA不死心,结果拖了很长时间),问题解决。

四.使用JNA的时候,大多数网上教程中Native.loadLibrary(“DLL name”, classname.class); 中的第一个参数都是相对路径。按照编程经验,这里应该也可以写成绝对路径,例如:

Native.loadLibrary(“C:\Program Files (x86)\Java\jdk1.8.0_51\bin\ DLLname.dll”, classname.class);

我这样试着跑了一下,证明我的猜想是正确的。

五. 把DLL放在Tomcat文件夹下的bin文件中也可以找到。Linux下放在 /user/local/bin 中。这是我最后采用的方式。

总结:

问题可能出在方方面面,需要学习的还很多,经验也相当重要。同时应该在自己的代码中建立完整的异常报错体系,和良好的异常处理习惯。但是我又担心太多的分支处理会影响整体的性能。还是好好修炼内功才是王道啊。

补充知识:正确配置java jdk环境变量方式 及 配置tomcat后执行startup.bat闪退原因分析

我们用的很多软件都需要配置环境变量,有的软件会自动配置环境变量,不需要我们手动配置.而有的必须手动配置环境变量,比如git, eclipse等.

下面分享一下正确配置java环境变量的方法.因为很多软件的运行都需要基于配置java环境变量的基础上.

以配置jdk1.8为例:

1 安装jdk1.8

如图中所以,打开jdk-xxx.exe,进行安装jdk,事先建两个文件夹jdk,jre,用于分别作为jdk和jre的安装文件夹

2 配置环境变量

安装完之后,就是配置环境变量:

JAVA_HOME -- 变量值就是jdk的主目录,图中已用蓝色标出(配置JAVA_HOME变量值时,末尾一定不要加分号)

Path -- 需要配置两个,jdk的bin目录和jdk下的jre的bin目录,如图中所示:

即 %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;

JAVA_HOME和Path配置截图:

配置完之后,可以打开Windows+R.输入cmd,打开dos窗口,输入 java 和 javac -version (或java version)来进行验证java环境变量是否配置成功和查看所配置的jdk版本信息

注意:

有些软件需要严格配置java环境变量.比如在配置Tomcat后,执行startup.bat手动启动tomcat会闪退.原因就是环境变量没有正确配置.

右键startup.bat,编辑,在文本的最后敲上pause,保存后重新运行startup.bat, 这时候窗口不会再闪退,而是停留在桌面上,如果有错误信息,这时候会显示出来,可以根据提示确定是哪里出错.进而针对性解决.其实90%的原因就是java环境变量没有正确配置

调试成功后,记得把pause去掉

(注意;有时java环境变量虽没有正确配置,但不影响eclipe的运行.但若没有正确配置java环境变量,就会导致配置tomcat后,执行startup.bat出现闪退现象.)

正确配置java环境变量方式,见前面所示。

以上这篇解决Java 部署Tomcat时使用jni和jna调用DLL文件的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • JavaWeb开发之【Tomcat 环境配置】MyEclipse+IDEA配置教程

    MyEclipse配置 IDEA配置Tomcat 环境 IDEA:2020.2 Tomcat:apache-tomcat-9.0.38 创建Web项目 Q1:Tomcat启动输出乱码 Q2:Servlet中使用 System.out,Tomcat控制台输出乱码 一:创建Web项目 1> 创建普通项目,添加框架支持 2> 为项目配置Tomcat 3> 部署项目到Tomcat 4> 手动添加依赖包 二:Tomcat启动输出乱码 -Dfile.encoding=UTF-8 三:Servl

  • 如何在IntelliJ IDEA 2018上配置Tomcat并运行第一个JavaWeb项目

    1 下载和启动Tomcat 进入官网 http://tomcat.apache.org/ ,下载最新版本的Tomcat 9 根据自己的电脑版本下载,我这里是windows 64位 下载完之后解压即可. 找到自己解压目录,打开文件夹下面的/bin目录,其中startup.bat是启动tomcat,shutdown.bat 是关闭tomcat 双击startup.bat启动tomcat后,打开 http://localhost:8080 ,若进入下面的界面则表示启动成功了. 2 在win10中为To

  • java 通过cmd 调用命令启动tomcat的操作

    我们有时候为了方便,公司会做一个项目管理,便于启动和关闭我们部署在服务器上面的项目,我这里就采用了java的方式,嗯......仅限于参考...... public static void main(String args[]) throws IOException { String exec = "C:/software/apache-tomcat-8.5.24/bin/startup.bat"; Runtime runtime = Runtime.getRuntime(); run

  • Java虚拟机使用jvisualvm工具远程监控tomcat内存

    jdk中自带了很多工具可以用于性能分析,位于jdk的bin目录下,jvisualvm工具可以以图形化的方式更加直观的监控本地以及远程的java进程的内存占用,线程状态等信息. 一.配置tomcat 在tomcat的catalina.sh文件开头加上如下配置: JAVA_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9999 -Dcom.sun.management.jmxremote.ssl=fa

  • Idea2020.2创建JavaWeb项目(部署Tomcat)方法详解

    Idea2020.2创建JavaWeb的方式略有改动,以下做个记录 1.创建项目不再是Java Enterprise了,而是先New 一个普通Java项目 2.创建项目后,选择Run->Edit Configuration->左上角加号->Tomcat Server(注意不是TomEE)->Local 3.点击Application右边的Configure,找到你放置的Tomcat的目录,点击OK 4.选择你运行项目调试项目的浏览器,我的电脑安装的是New Edge,你可以自行选择

  • IDEA配置java开发环境(maven、gradle、tomcat)

    idea安装好以后,是需要简单的配置一下的,而且要分不同的开发环境,此处就不多扩展了,我们就一起来配置java的开发环境 准备: 1.jdk环境配置 ------- java环境变量请参考(linux环境下java开发环境配置 或 windows环境下java开发环境配置) 2.maven build工具(maven项目使用),下载地址,本地下载地址 3.gradle build工具(gradle项目使用),下载地址,本地下载地址 4.tomcat 8.x ,下载地址,本地下载地址 内容: 一.

  • 解决Java 部署Tomcat时使用jni和jna调用DLL文件的问题

    我的前一篇博客提到,我们公司项目的restful框架中要用到底层的DLL C++库,最后经过测试验证结果选择采用JNA方法来调DLL库. 之后基础框架在IDEA中的jetty服务中调试成功,但是在部署到Tomcat上时出现了无法加载DLL库的状况,只能现学现卖了. 一. 把DLL文件放在Tomcat下的方法: 在Tomcat中加载dll,供其它接口调用: 在Tomcat目录根下新建一个文件夹,这里就叫DLL吧,<tomcat_home>/DLL: 把需要用到的dll放入新建的DLL目录下: 编

  • 完美解决在eclipse上部署Tomcat时出现8080等端口被占用的问题

    问题描述: 在eclipse中部署Tomcat时,出现如下错误. 解决方法如下: 方法一: 1.开始->cmd->输入命令netstat -ano出现下图所示(注意下边显示有些错位,最后一列是PID): 2.有的同学输入netstat -ano后显示不是内部文件,解决方法如下: 开始->cmd->cd: c\WINDOWS\system32\ 结果如上图所示. 3.打开Windows任务管理器,点击查看,点击选择列,勾起PID选项,如下图所示: 4.由于自己机子上的8080端口处于

  • Web项目打成war包部署Tomcat时运行startup.bat直接闪退部署失败的快速解决方案

    即上篇通过将web项目打成war包部署到Tomcat服务器,解决mysql问题后,又出现了新问题,真是一波三折,所以将解决过程分享给大家,希望能帮助到小伙伴们~ 将打好的war包拷贝到Tomcat的webapps目录,然后在Tomcat的bin目录找到startup.bat批处理文件,直接双击执行,结果运行几秒后直接闪退,顿时有种不好的预感,在浏览器访问web项目,结果连localhost:8080都无法访问,web项目未发布成功,一脸懵逼~ 没有日志看不到为啥发布不成功额,想了想,可以稍微修改

  • Java调用dll文件的实现解析

    目录 Java调用dll文件 环境 接下来进入正文 Java调用dll文件几种常见方式 Java调用动态库需要关注的问题 一.数据类型对应关系 二.Jnative调用dll 三.JNA调用dll Java调用dll文件 近期根据C++做了一个图片质量检测的项目,目前需要在在java中进行调用,所以先在C++上生成dll文件,然后基于java调用dll文件实现功能. 环境 C++:VS2017(之前配置opencv真是要了老命) java:idea2020+jdk1.8. 注意:jdk安装的时候小

  • Java调用.dll文件的方法

    下截JNative组件 jnative.sourceforge.net/ 到这里下载JNative开源项目,我下载的是1.3.2 解压JNative-<st1:chsdate isrocdate="False" islunardate="False" day="30" month="12" year="1899">1.3.2</st1:chsdate>.zip 获得三个文件,分别是:

  • 解决eclipse启动tomcat时不能加载web项目的问题

    问题描述: eclipse启动tomcat时,不能加载web项目,但是把war包丢进tomcat的webapps下是能正常运行的 解决方式: 右键项目--打开Properties--找到Deployment Assembly--将WebContent修改成你的项目webapp路径 eclipse与tomcat绑定成功后却无法访问自己的web项目下的HTML文件 WARNING: [SetContextPropertiesRule]{Context} Setting property 'sourc

  • 解决Java包装类比较时遇到的问题

    前言 本文主要给大家介绍了关于Java包装类在比较时遇到的一些问题的解决方法,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 例1: Integer a = 1; Integer b = 2; Integer c = 3; Integer d = 3; Integer e= 321; Integer f= 321; Long g = 3L; System.out.println(c == d); //1 System.out.println(e == f); //2 Syste

  • Linux部署Tomcat发布项目过程中各种问题及解决方法

    部署项目到项目现场测试环境 JDK1.8 Tomcat8.5 Maven打包好的war Linux-----Centos 不知道谁给现场的Tomcat,将其上传到Linux平台******目录,并且进行解压.直接启动 图1: 问题1 因为是第一次启动Tocmat,没有日志文件.所以直接启动 ./startup.sh.后续可以使用以下命令动态的查看日志信息.执行后提示没有执行权限 ./startup.sh & tailf ../logs/catalina.out 问题分析: .sh可执行文件 当前

  • idea启动Tomcat时控制台乱码的解决方法(亲测有效)

    目录 前言 解决方法: 方法一: 方法二: 方法三: 方法四: 总结 前言 很多人在idea中启动项目时会出现控制台的中文乱码,其实也无伤大雅,但是本人看着不舒服所以在网上查找了一些方法和各位分享一下 解决方法: 方法一: 1.打开tomcat配置页面,Edit Configurations. 2.选择项目部署的tomcat,在配置项VM options输入框中输入-Dfile.encoding=UTF-8,点击Apply或OK即可. 3.修改idea设置里的文件编码格式为utf-8. 我修改了

  • 在docker中部署tomcat并且部署java应用程序的步骤详解

    先给大家简单说下Docker的概念 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制,相互之间不会有任何接口. 1.先说如何在docker中部署tomcat 第一步:root用户登录在系统根目录下创建文件夹tomcat7,命令如:mkdir tomcat7,并且切换到该目录下:cd tomcat7: 第二步:创建Dockerfile,命令如:touch Docker

随机推荐