我无法运行一个脚本,它应该重build一个通常在Tomcat 6(Debian版本)内部运行的Web服务(Fedora Commons数字仓库)的数据库。 我在Debian 6上运行它,尽pipeTomcat开始运行,但在运行Tomcat之前必须调用的重build脚本遇到了以下问题:
ERROR 2010-10-11 13:26:38.836 [main] (Server) Fatal error while starting server java.lang.NoClassDefFoundError: org/apache/commons/pool/impl/GenericObjectPool at org.apache.commons.dbcp.BasicDataSource.createConnectionPool(BasicDataSource.java:1492) [na:Nightly-201002202152] at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1374) [na:Nightly-201002202152] at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044) [na:Nightly-201002202152] at org.fcrepo.server.storage.ConnectionPool.getConnection(ConnectionPool.java:283) [fcrepo-server-3.4.jar:na] at org.fcrepo.server.utilities.SQLUtilityImpl.i_createNonExistingTables(SQLUtilityImpl.java:281) [fcrepo-server-3.4.jar:na] at org.fcrepo.server.utilities.SQLUtility.createNonExistingTables(SQLUtility.java:146) [fcrepo-server-3.4.jar:na] at org.fcrepo.server.utilities.rebuild.RebuildDOManager.postInitModule(RebuildDOManager.java:130) [fcrepo-server-3.4.jar:na] at org.fcrepo.server.Server.<init>(Server.java:636) [fcrepo-server-3.4.jar:na] at org.fcrepo.server.utilities.rebuild.RebuildServer.<init>(RebuildServer.java:43) [fcrepo-server-3.4.jar:na] at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) [na:1.6.0_21] at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) [na:1.6.0_21] at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) [na:1.6.0_21] at java.lang.reflect.Constructor.newInstance(Constructor.java:513) [na:1.6.0_21] at org.fcrepo.server.utilities.rebuild.RebuildServer.getRebuildInstance(RebuildServer.java:120) [fcrepo-server-3.4.jar:na] at org.fcrepo.server.utilities.rebuild.Rebuild.getServer(Rebuild.java:173) [fcrepo-server-3.4.jar:na] at org.fcrepo.server.utilities.rebuild.SQLRebuilder.start(SQLRebuilder.java:111) [fcrepo-server-3.4.jar:na] at org.fcrepo.server.utilities.rebuild.Rebuild.<init>(Rebuild.java:106) [fcrepo-server-3.4.jar:na] at org.fcrepo.server.utilities.rebuild.Rebuild.main(Rebuild.java:394) [fcrepo-server-3.4.jar:na] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [na:1.6.0_21] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) [na:1.6.0_21] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) [na:1.6.0_21] at java.lang.reflect.Method.invoke(Method.java:597) [na:1.6.0_21] at org.fcrepo.server.utilities.rebuild.cli.CLILoader.main(CLILoader.java:77) [fcrepo-server-3.4-cli-loader-main.jar:na]
我不认为Tomcatpipe理正确连接到MySQL。
我正在执行该脚本作为tomcat6用户。 我认为这可能是commons-pool.jar不在我的CLASSPATH,但我已经添加了几乎每个可能的类path目录到用户的环境variables:
$ echo $CLASSPATH /usr/lib/jvm/java-6-sun/lib/dt.jar:/usr/share/tomcat6/lib:/usr/lib/jvm/java-6-sun/lib/tools.jar:/usr/local/fedora/client/lib:/usr/share/java:/usr/share/tomcat6/bin/bootstrap.jar:/usr/share/tomcat6/lib:/var/lib/tomcat6/common/classes:/var/lib/tomcat6/common/lib:/var/lib/tomcat6/lib:/usr/share/java:/usr/local/fedora/server/bin:/usr/local/fedora/client/lib:/usr/local/fedora/server/bin/fcrepo-server-3.4-cli-loader-main.jar:/var/lib/tomcat6/webapps/fedora/WEB-INF/lib:/var/lib/tomcat6/webapps/fedora/WEB-INF/classes
Commons-pool.jar位于以下path:
/usr/share/java/commons-pool.jar /usr/share/tomcat6/lib/commons-pool.jar
mysql-connector-java也应该在CLASSPATH中。 我无法弄清楚什么是错的。 该脚本设置了以下环境:
# ps aux | grep java tomcat6 3177 32.0 3.1 533992 64608 pts/1 Sl+ 13:32 0:01 /usr/lib/jvm/java-6-sun/bin/java -server -Xmn64m -Xms256m -Xmx256m -Djava.endorsed.dirs=/var/lib/tomcat6/common/endorsed:/var/lib/tomcat6/common/lib -Djavax.net.ssl.trustStore=/usr/local/fedora/server/truststore -Djavax.net.ssl.trustStorePassword=tomcat -Djavax.xml.parsers.DocumentBuilderFactory=org.apache.xerces.jaxp.DocumentBuilderFactoryImpl -Djavax.xml.parsers.SAXParserFactory=org.apache.xerces.jaxp.SAXParserFactoryImpl -Dcom.sun.xacml.PolicySchema=/usr/local/fedora/server/xsd/cs-xacml-schema-policy-01.xsd -Dfedora.home=/usr/local/fedora -Dfedora.web.inf.lib=/var/lib/tomcat6/webapps/fedora/WEB-INF/lib org.fcrepo.server.utilities.rebuild.cli.CLILoader org.fcrepo.server.utilities.rebuild.Rebuild
我将不胜感激任何援助。
java.lang.NoClassDefFoundError表示类path中的类的运行时版本与编译时的版本不同。
注意:这不是一个ClassNotFound
事实上,你的问题是find类的多个版本。
更新
在Tomcat不使用系统CLASSPATH之前,我应该指出。 在那里设置的值应该被忽略。
http://www.chemaxon.com/jchem/doc/admin/tomcat.html显示在$CATALINA_HOME/lib放入的任何内容在启动时自动进入服务器类path。
jar被shared.loader或common.loader属性所/conf/catalina.properties
我读
common.loader=${catalina.home}/lib,${catalina.home}/lib/*.jar
所以我认为问题是你可能在Tomcat构build它的类path的其他位置也有这个类/ jar的副本。
这就是WEB-INF / classes中的任何内容,并且您部署中的WEB-INF / lib下的JAR中的任何内容都位于CLASSPATH中,还有安装在Tomcat 6的lib中的JAR。
更新2
是的,你可以删除包含文件夹,jar子将不再在类path中。
但是,我看到你在类path中有这些文件夹,它们是否包含这些jar子的任何版本? Tomcat 6将所有内容放在tomcat6 / lib中, 不存在Tomcat6 / common / lib ,这是Tomcat早期版本的遗留问题。 我想知道这些是否被错误地从早期的类path条目重命名?
/var/lib/tomcat6/common/classes: /var/lib/tomcat6/common/lib: