java.lang.NoClassDefFoundError:无法初始化类com.hp.hpl.jena.query.Query

时间:2013-04-01 13:24:50

标签: java eclipse jsp google-app-engine jena

我和Jena一起玩,我在Eclipse中设置了一个Java Google Web Application项目。我下载了Jena 2.0 Libraries并将它们添加到项目的Build路径以及/war/WEB-INFO/lib/文件夹中。

My Simple servlet尝试使用以下代码行

实例化Query
...
Query query = QueryFactory.create(queryString);
...

所以没有编译错误,因为我说Libarries都在Build Path和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文件包含在项目的Build Path和WEB-INF下的lib文件夹中。

非常感谢。

编辑:奇怪的是QueryFactory实际上没有错误,QueryQueryFactory都在同一个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版本,我猜他们并不那么相关

2 个答案:

答案 0 :(得分:0)

将以下jar添加到classpath

arq-2.8.1-SHAPSHOT.jar

答案 1 :(得分:0)

ModelFactory.createDefaultModel();我遇到同样的问题 罐子来自上一个Jena(2.11.0)和AppEngine 1.8.4。

XercesImpl遇到了问题,因此我将其从构建路径中删除了。 但是我发现错误是在运行时并且没有发出编译警告,我仍然感到非常奇怪。