【问题标题】:How to add a native library in Tomcat?如何在 Tomcat 中添加原生库?
【发布时间】:2012-12-24 08:11:32
【问题描述】:

我想在 Tomcat 中添加 gdal 库。我读了Native libraries not found in Tomcat,但不明白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.

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

【问题讨论】:

    标签: java tomcat java.library.path


    【解决方案1】:

    接受的答案(截至 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
    

    在 Windows 上,java.library.path 将默认为 %PATH%,因此上述所有方法的替代方法是更改​​您的 PATH 环境变量。

    如果您不想混淆 JVM 将从何处加载您的本机库,请忽略上面的 %PATH%; 部分。出于这个原因,我个人省略了%PATH%,但这是个人喜好问题。

    【讨论】:

    • setenv.bat 在默认的 TC8.5 ZIP 中不存在。请在bin 中创建它 - 并阅读RUNNING.txt ch 3.4
    • 在 linux/osx 的 bin 文件夹中创建“setenv.sh”并添加行:export CATALINA_OPTS="$CATALINA_OPTS -Djava.library.path=.."
    【解决方案2】:

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

    set JAVA_OPTS="-Djava.library.path=/usr/tomcat/shared/lib"
    

    可以放在后面

    :noJuliManager
    set JAVA_OPTS=%JAVA_OPTS% %LOGGING_MANAGER%
    

    【讨论】:

    • 解释一下要修改哪个文件就好了,看来OP是从Java世界开始的。
    • 在 startup.bat 中找不到这一行 :noJuliManager
    • @KliverMax 从org.gdal.ogr.ogr.GetDriverCount(ogr.java:98)这样的异常可以看出lib文件已经加载成功。我认为这个例外与我不熟悉的lib文件本身的使用有关。您可能想提出另一个关于 gdal 库的问题。
    • set JAVA_OPTS="-Djava.library.path=%CATALINA_BASE%\lib"我用的是这个,对吗?
    • 正如下面@peterh 所说,您永远不应该编辑 catalina.bat/.sh。这应该在 setenv.bat 中。
    【解决方案3】:

    根据 catalina.bat 上的 cmets, 我认为正确的地方是 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.
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-04
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-27
    相关资源
    最近更新 更多