Java 如何在Tomcat中添加本机库?
我想在Tomcat中添加gdal库。我读了,但不明白在Java 如何在Tomcat中添加本机库?,java,tomcat,java.library.path,Java,Tomcat,Java.library.path,我想在Tomcat中添加gdal库。我读了,但不明白在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:
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.
异常
javax.servlet.ServletException:servlet执行引发异常
com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:72)
com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilter.doFilter(InvokerFilter.java:70)
根本原因
java.lang.UnsatisfiedLinkError:org.gdal.ogr.ogrJNI.GetDriverCount()I
org.gdal.ogr.ogrJNI.GetDriverCount(本机方法)
org.gdal.ogr.ogr.GetDriverCount(ogr.java:98)
org.geotools.data.ogr.OGRDataStore(OGRDataStore.java:169)
test.Read.getKadnum(Read.java:56)
test.Zipper.mifUnzip(zippers.java:139)
test.Zipper.Unzip(zippers.java:60)
test.uploadfile.doPost(uploadfile.java:105)
javaservlet.http.HttpServlet.service(HttpServlet.java:641)
javaservlet.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)
注意,根本原因的完整堆栈跟踪可在Apache Tomcat/7.0.23日志中找到。
我从以下位置下载了gdal 64位:它必须在
catalina.bat
中设置,而不是在startup.bat中
set JAVA_OPTS="-Djava.library.path=/usr/tomcat/shared/lib"
可追
:noJuliManager
set JAVA_OPTS=%JAVA_OPTS% %LOGGING_MANAGER%
根据catalina.bat上的评论, 我认为合适的地方是卡塔琳娜奥普斯
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.
公认的答案(截至2016年2月)完全是错误的
- 你从来都不应该编辑catalina.bat/
。不要!(在Tomcat的catalina.sh
目录中,您应该触摸的唯一文件是bin/
)setenv.bat
- 右边的配置变量是
,而不是CATALINA\u OPTS
JAVA\u OPTS
- 如果您在Windows上,则不希望引用SET命令的值,因为引号已成为实际值的一部分。(与Unix/Linux不同)
- 您可能希望保留
中已有的内容java.library.path
setenv.bat
的文件放入与catalina.bat
相同的目录中。该文件将不存在,除非您以前自己创建了它。因此,创建文件。它必须包含以下内容以供您使用:
set CATALINA_OPTS=%CATALINA_OPTS%-Djava.library.path=%path%;c:\mydll
在Windows上,java.library.path
将默认为%path%
,因此上述所有操作的另一种方法是更改path环境变量
如果您不想混淆JVM将从何处加载本机库,请忽略
%PATH%代码>上面的部分。就我个人而言,出于这个原因,我省略了%PATH%
,但这是一个品味问题。最好解释一下要修改的文件,它看起来像是在Java世界中开始的OP。在startup.bat中找不到这一行:noJuliManager
。@KliverMax来自异常,如org.gdal.ogr.ogr.GetDriverCount(ogr.Java:98)
您可以看到lib文件已成功加载。我认为这个例外是关于lib文件本身的用法,我不熟悉。您可能想提出另一个关于gdal库的问题。set JAVA_OPTS=“-Djava.library.path=%CATALINA\u BASE%\lib”
我使用了这个,对吗?正如下面@peterh所说的,您永远不应该编辑CATALINA.bat/.sh。这应该在setenv.bat中。这是正确的,它是CATALINA\u OPTS
,而不是JAVA\u OPTS
(虽然从技术上讲后者也可以)。但是确实有很多。setenv.bat
在默认的TC8.5zip中是不存在的。请在bin
-中创建它,并阅读RUNNING.txt
ch3.4In linux/osx在bin文件夹中创建“setenv.sh”,并添加行:export CATALINA_OPTS=“$CATALINA_OPTS-Djava.library.path=…”