如何在Tomcat中添加本机库?

Kli*_*Max 13 java tomcat java.library.path

我想在Tomcat中添加gdal库.我读过Tomcat中找不到的Native库 但是不明白startup.bat我应该添加到哪里-Djava.library.path.

错误:

exception

javax.servlet.ServletException: Servlet execution threw an exception
com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:72)
com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilter.doFilter(InvokerFilter.java:70)

root cause

java.lang.UnsatisfiedLinkError: org.gdal.ogr.ogrJNI.GetDriverCount()I
org.gdal.ogr.ogrJNI.GetDriverCount(Native Method)
org.gdal.ogr.ogr.GetDriverCount(ogr.java:98)
org.geotools.data.ogr.OGRDataStore.<clinit>(OGRDataStore.java:169)
test.Read.getKadnum(Read.java:56)
test.Zipper.mifUnzip(Zipper.java:139)
test.Zipper.Unzip(Zipper.java:60)
test.uploadfile.doPost(uploadfile.java:105)
javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:72)
com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilter.doFilter(InvokerFilter.java:70)

note The full stack trace of the root cause is available in the Apache Tomcat/7.0.23 logs.
Run Code Online (Sandbox Code Playgroud)

我从http://vbkto.dyndns.org:1280/sdk/PackageList.aspx?file=release-1600-x64-gdal-1-9-mapserver-6-2.zip下载了gdal 64bit.

pet*_*erh 31

接受的答案(截至2016年2月)是完全错误的.

  • 永远不应该编辑catalina.bat/ catalina.sh.别 !(Tomcat的bin/目录中唯一一个你应该触摸的文件setenv.bat).

  • 正确的配置变量CATALINA_OPTS不是JAVA_OPTS.

  • 如果您在Windows上,那么您不希望引用SET命令的值,因为引号成为实际值的一部分.(与Unix/Linux不同)

  • 您可能希望保留已有的内容java.library.path.

(在下面我假设您在Windows上,相应地更改Linux/Solaris/Mac OSX).

以下是如何操作:将调用的文件setenv.bat放入同一目录中catalina.bat.该文件将不存在,除非您以前自己创建过.所以创建文件.它必须具有以下内容用于您的目的:

set CATALINA_OPTS=%CATALINA_OPTS% -Djava.library.path=%PATH%;c:\mydlls
Run Code Online (Sandbox Code Playgroud)

在Windows java.library.path上将默认为%PATH%所以上面所有的替代路径将是更改您的PATH环境变量.

如果您不想完全混淆JVM将加载本机库的位置,那么请忽略%PATH%;上面的部分.我个人省略%PATH%了这个原因,但这是一个品味问题.


cod*_*LMN 11

它必须设置catalina.bat而不是startup.bat.

set JAVA_OPTS="-Djava.library.path=/usr/tomcat/shared/lib"
Run Code Online (Sandbox Code Playgroud)

可以放在后面

:noJuliManager
set JAVA_OPTS=%JAVA_OPTS% %LOGGING_MANAGER%
Run Code Online (Sandbox Code Playgroud)

  • @KliverMax从`org.gdal.ogr.ogr.GetDriverCount(ogr.java:98)这个例外中你可以看到lib文件已成功加载.我认为这个例外是关于lib文件本身的使用,我并不熟悉它.您可能想要发起有关gdal库的另一个问题. (2认同)
  • `set JAVA_OPTS =" - Djava.library.path =%CATALINA_BASE%\ lib"`我用过这个,是不是? (2认同)
  • 正如下面@peterh 所说,你永远不应该编辑 catalina.bat/.sh。这应该在 setenv.bat 中。 (2认同)

小智 5

根据catalina.bat的评论,我认为正确的地方是CATALINA_OPTS.

rem   CATALINA_OPTS   (Optional) Java runtime options used when the "start",
rem                   "run" or "debug" command is executed.
rem                   Include here and not in JAVA_OPTS all options, that should
rem                   only be used by Tomcat itself, not by the stop process,
rem                   the version command etc.
rem                   Examples are heap size, GC logging, JMX ports etc.
Run Code Online (Sandbox Code Playgroud)