我正在玩一些 Jena 并在 Eclipse 中设置了一个 Java Google Web 应用程序项目。我下载了 Jena 2.0 库并将它们添加到项目的构建路径和/war/WEB-INFO/lib/
文件夹中。
我的简单 servlet 尝试使用以下代码行实例化查询
...
Query query = QueryFactory.create(queryString);
...
所以没有编译错误,正如我所说,Libarries 都在构建路径和 WEB-INF 下的 lib 文件夹中(在战争目录中。)
当我运行 webapp 并执行 servlet 时,我得到以下异常:
java.lang.NoClassDefFoundError: Could not initialize class com.hp.hpl.jena.query.Query
at com.hp.hpl.jena.query.QueryFactory.create(QueryFactory.java:78)
at com.hp.hpl.jena.query.QueryFactory.create(QueryFactory.java:52)
at com.hp.hpl.jena.query.QueryFactory.create(QueryFactory.java:40)
at nyx.servlets.PeripheralServlet.extractPlace(PeripheralServlet.java:102)
at nyx.servlets.PeripheralServlet.doCreate(PeripheralServlet.java:83)
servlet 类是 PeripheralServlet.java,方法extractPlace中的第 102 行是上面我尝试实例化 Query 对象的行。
谁能告诉我我的问题可能是什么?对我来说,它看起来像是缺少 jar 包含或该行上的某些内容,但正如我所说,我将所有 jar Jena 文件都包含到项目的构建路径和 WEB-INF 下的 lib 文件夹中。
非常感谢。
编辑:奇怪的是QueryFactory
它实际上没有错误,并且两者Query
都QueryFactory
在同一个 Jena 包中,对吗?
EDIT2:从头开始重复该过程并确保只包含一次所需的罐子后,现在我得到以下异常:
java.lang.StackOverflowError
at java.util.regex.Pattern$Curly.match(Pattern.java:3744)
at java.util.regex.Pattern$GroupHead.match(Pattern.java:4168)
at java.util.regex.Pattern$Branch.match(Pattern.java:4114)
at java.util.regex.Pattern$Branch.match(Pattern.java:4112)
at java.util.regex.Pattern$GroupTail.match(Pattern.java:4227)
at java.util.regex.Pattern$Curly.match0(Pattern.java:3782)
at java.util.regex.Pattern$Curly.match(Pattern.java:3744)
at java.util.regex.Pattern$GroupHead.match(Pattern.java:4168)
at java.util.regex.Pattern$Start.match(Pattern.java:3055)
at java.util.regex.Matcher.search(Matcher.java:1105)
at java.util.regex.Matcher.find(Matcher.java:535)
at com.google.appengine.tools.development.LocalEnvironment.getServerName(LocalEnvironment.java:302)
at com.google.appengine.tools.development.DevAppServerImpl.getCurrentAppContext(DevAppServerImpl.java:372)
...
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:82)
at org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:156)
at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:704)
at org.slf4j.impl.JCLLoggerFactory.getLogger(JCLLoggerFactory.java:64)
...
如果我在此之后重新加载页面,我会再次得到原始异常。我一直在做一些研究,发现一些相关问题可以追溯到 2009 年,因此是 Jena 2.6 版。假设我们在 2013 年并且 Jena 已经发展到它的 2.10 版本,我猜它们不是那么相关