这有点难以解释..
我正在使用 tomcat 6.0 来测试部署 WAR 文件。我正在使用 proGuard 来混淆 WAR 文件。
要使用 proGuard,通常位于 WEB-INF/classes 中的所有 com.*、org.* 等都必须打包到 WEB-INF/lib 中的单个 .jar 中。
到目前为止还不错。
当我部署时,问题就来了。该应用程序使用 Hibernate 和一个 hibernate 监听器。此监听器无法加载。由此我了解到,已经找到并至少开始使用具有完整类集的 .jar。但是, hibernate 监听器的失败会结束应用程序的部署,并且什么也不会出现,甚至索引页面也不会出现。
我的日志文件(设置为 DEBUG)给我:
[2011-11-11 10:19:33] [1381 prunsrv.c] [debug] Commons Daemon procrun log initialized
[2011-11-11 10:19:33] [info] Commons Daemon procrun (1.0.2.0) started
[2011-11-11 10:19:33] [info] Running Service...
[2011-11-11 10:19:33] [1165 prunsrv.c] [debug] Inside ServiceMain...
[2011-11-11 10:19:33] [info] Starting service...
[2011-11-11 10:19:33] [447 javajni.c] [debug] Jvm Option[0] -Dcatalina.home=C:\tomcat\Tomcat 6.0
[2011-11-11 10:19:33] [447 javajni.c] [debug] Jvm Option[1] -Dcatalina.base=C:\tomcat\Tomcat 6.0
[2011-11-11 10:19:33] [447 javajni.c] [debug] Jvm Option[2] -Djava.endorsed.dirs=C:\tomcat\Tomcat 6.0\endorsed
[2011-11-11 10:19:33] [447 javajni.c] [debug] Jvm Option[3] -Djava.io.tmpdir=C:\tomcat\Tomcat 6.0\temp
[2011-11-11 10:19:33] [447 javajni.c] [debug] Jvm Option[4] -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
[2011-11-11 10:19:33] [447 javajni.c] [debug] Jvm Option[5] -Djava.util.logging.config.file=C:\tomcat\Tomcat 6.0\conf\logging.properties
[2011-11-11 10:19:33] [447 javajni.c] [debug] Jvm Option[6] -Djava.class.path=C:\tomcat\Tomcat 6.0\bin\bootstrap.jar
[2011-11-11 10:19:33] [447 javajni.c] [debug] Jvm Option[7] vfprintf
[2011-11-11 10:19:33] [629 javajni.c] [debug] argv[0] = start
[2011-11-11 10:19:33] [655 javajni.c] [debug] Java Worker thread started org/apache/catalina/startup/Bootstrap:main
[2011-11-11 10:19:34] [1006 prunsrv.c] [debug] Java started org/apache/catalina/startup/Bootstrap
[2011-11-11 10:19:34] [info] Service started in 1138 ms.
[2011-11-11 10:19:34] [1272 prunsrv.c] [debug] Waiting worker to finish...
然后停止。
卡塔利娜给我:
11-Nov-2011 10:21:35 org.apache.catalina.core.StandardContext start
SEVERE: Error listenerStart
有没有人有过让 hibernate 在可混淆的 war 中运行的经验( war 实际上还没有被混淆,它只是以 proGuard 需要的格式设置以便混淆),一个独立的 jar,或者甚至只是如何获得更精确的日志记录!
谢谢
更新: 我以为 Tomcat 正在找到 com.* 类等所在的 jar ,但现在我不确定。有谁知道如何使用 web.xml 指向 WEB-INF/lib 文件夹中的特定 .jar 文件?
目前是,例如:
<listener>
<listener-class>com.*etc*.HibernateListener</listener-class>
</listener>
<servlet>
<servlet-name>Application Name</servlet-name>
<servlet-class>com.vaadin.terminal.gwt.server.ApplicationServlet</servlet-class>
etc etc...
但所有这些路径都需要指向 .jar 文件中。或者 web.xml 中的属性需要定义可以找到这些路径的位置。
谢谢
最佳答案
已解决。
对于遇到相同问题的任何人:我最终使用 WEB-INF/classes
中的 logging.properties 文件使日志记录正常工作。我在许多论坛帖子中找到的设置就是为了这种可能性。主要设置是 DEBUG 以捕捉最大的细节。
这个日志记录让我看到缺少一个 jar,我之前把它放在 /WEB-INF/lib
文件夹中,但是应用程序看不到它所以我不得不把/src/
文件夹中的类并重新编译。无论如何它都有效。
我仍然对 WAR 混淆的其他元素存在重大问题,但这些是针对其他问题的。
-S
关于Java & Tomcat : Severe Error starting obfuscated app w/hibernate inside,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8092770/