Linux上的Tomcat 7无法在Grails 3 War文件中找到Java类

时间:2016-12-31 13:53:44

标签: java tomcat grails

我有一个 grails 3 项目,在src / main / groovy /文件夹中有java源代码(如指定的here)。

代码在IntelliJ IDE中运行良好,在Mac OS X El Capitan上部署Tomcat 7服务器(使用7.0.73,7.0.70和7.0.33测试,按指定here安装)< / p>

服务器详细信息(错误发生的位置)

但是在Red Hat Linux服务器上,tomcat version命令报告以下内容(尽管启动默认页面列出了版本7.0.33),

Server version: Apache Tomcat/7.0.70
Server built:   Aug 5 2016 19:24:52 UTC
Server number:  7.0.70.0
OS Name:        Linux
OS Version:     2.6.32-642.6.2.el6.x86_64
Architecture:   amd64
JVM Version:    1.8.0_111-b14
JVM Vendor:     Oracle Corporation

war文件在放入web应用程序目录时运行,但在使用src / main / groovy中的java类的任何页面上停顿并出现以下错误(在catalina.out日志文件中),

ERROR org.springframework.boot.context.web.ErrorPageFilter - Forwarding to error page from request [/url/] due to exception [Could not initialize class package_name.class_name]
java.lang.NoClassDefFoundError: Could not initialize class package_name.class_name

偶尔会出现此错误(虽然在Linux上设置LD_LIBRARY_PATH后似乎停止了),

ERROR org.springframework.boot.context.web.ErrorPageFilter - Forwarding to error page from request [/url] due to exception [no opencv_java310 in java.library.path]
java.lang.UnsatisfiedLinkError: no opencv_java310 in java.library.path

有些可行的方法,

  • 代码成功构建为war文件
  • 当导航到webapps / war_name / WEB-INF / classes / package_name /那里有类文件时,可以使用(从classes /文件夹而不是package_name /)java package_name.class_name运行AND。

  • 使用opencv的测试程序在服务器上成功运行,因此似乎正确安装了本机库。

  • 同样的war文件适用于Mac OS El Capitan和Tomcat版本7.0.70,7.0.73,7.0.33,但是它使用bin shell脚本而不是服务。

1 个答案:

答案 0 :(得分:0)

这是因为tomcat不尊重Linux机器上的LD_LIBRARY_PATH设置。所以用java运行的任何测试程序...(包括运行java tomcat_dir / webapps / war_name / classes / File.class)都可以工作,但它仍会在tomcat下破坏并抱怨导入类失败。解决这个问题的方法是忽略LD_LIBRARY_PATH(或者不要使用Tomcat!,我希望),并将so文件符号链接或复制到java.library.path路径之一。