在Appengine上使用org.apache.lucene的问题

时间:2014-11-06 15:49:52

标签: google-app-engine lucene guice google-cloud-endpoints

您好,在我的上一个项目中,我使用lucene-analyzer在appengine上生成关键字。现在我想再次使用它与我的新项目,但似乎它受到GAE的限制。我试图将版本设置回我在上一个项目中使用的版本,但它不再起作用了。我收到以下错误:

    java.lang.NoClassDefFoundError: java.lang.management.ManagementFactory is a restricted class. Please see the Google  App Engine developer's guide for more details.
[INFO]  at com.google.appengine.tools.development.agent.runtime.Runtime.reject(Runtime.java:51)
[INFO]  at org.apache.lucene.util.RamUsageEstimator.<clinit>(RamUsageEstimator.java:223)
[INFO]  at org.apache.lucene.util.ArrayUtil.<clinit>(ArrayUtil.java:32)
[INFO]  at java.lang.Class.forName0(Native Method)
[INFO]  at java.lang.Class.forName(Class.java:190)
[INFO]  at com.google.appengine.tools.development.agent.runtime.RuntimeHelper.checkRestricted(RuntimeHelper.java:70)
[INFO]  at com.google.appengine.tools.development.agent.runtime.Runtime.checkRestricted(Runtime.java:64)
[INFO]  at org.apache.lucene.analysis.tokenattributes.CharTermAttributeImpl.<init>(CharTermAttributeImpl.java:33)
[INFO]  at org.apache.lucene.analysis.tokenattributes.PackedTokenAttributeImpl.<init>(PackedTokenAttributeImpl.java:40)
[INFO]  at org.apache.lucene.util.AttributeFactory$1.createInstance(AttributeFactory.java:140)
[INFO]  at org.apache.lucene.util.AttributeFactory$StaticImplementationAttributeFactory.createAttributeInstance(AttributeFactory.java:103)
[INFO]  at org.apache.lucene.util.AttributeSource.addAttribute(AttributeSource.java:222)
[INFO]  at org.apache.lucene.analysis.standard.StandardTokenizer.<init>(StandardTokenizer.java:182)
[INFO]  at org.apache.lucene.analysis.de.GermanAnalyzer.createComponents(GermanAnalyzer.java:194)
[INFO]  at org.apache.lucene.analysis.Analyzer.tokenStream(Analyzer.java:144)

有人知道我为什么会收到此错误吗?

1 个答案:

答案 0 :(得分:1)

您收到此错误是因为Lucene的RamUsageEstimator尝试访问ManagementFactory类以确定VM的对象对齐。 java.lang.management.ManagementFactory受GAE限制(可能出于安全原因),并抛出NoClassDefFoundError

如果您查看LuceneAppEngineLuGAEne(提供允许您在Google App Engine上使用Lucene的目录实施的项目),您可以看到它们提供了另一种RamUsageEstimator,其中他们抓住了这个例外:

我认为你应该考虑使用其中一种&#34; lucene-GAE&#34;项目,如果你想在GAE上使用lucene-analyzer。

我不知道为什么它在您之前的项目中对您有用。也许您使用过这些lucene-GAE项目中的一个而忘记将其包含在新项目中?