【问题标题】:cannot find symbol : class NumberTools找不到符号:类 NumberTools
【发布时间】:2015-03-21 18:16:20
【问题描述】:

我不懂java。我正在尝试使用 eclipse 为 Bamboo 编译一个插件。我得到java编译错误。请帮助我识别/解决此问题。

JmeterResultsWriter.java 长这样

  ##########################JmeterResultsWriter.java ##################

    package com.atlassian.bamboo.plugins.jmeter_aggregator.index;

    import java.util.Map;

    import org.apache.lucene.document.Document;
    import org.apache.lucene.document.Field;
    import org.apache.lucene.document.NumberTools;
    import org.apache.lucene.document.Field.Index;
    import org.apache.lucene.document.Field.Store;
    import org.jetbrains.annotations.NotNull;

    import com.atlassian.bamboo.index.CustomPostBuildIndexWriter;
    import com.atlassian.bamboo.plugins.jmeter_aggregator.builder.JmeterBuildDataHelper;
    import com.atlassian.bamboo.plugins.jmeter_aggregator.Sampler;
    import com.atlassian.bamboo.resultsummary.BuildResultsSummary;
    import com.thoughtworks.xstream.XStream;

    public class JmeterResultsWriter implements CustomPostBuildIndexWriter
    {
        public static final String JMETER_AGGREGATOR_NINETY_PERECENT = "jmeter.aggregator.ninety.percent";
        public static final String JMETER_AGGREGATOR_MEDIAN = "jmeter.aggregator.median";
        public static final String JMETER_AGGREGATOR_THROUGHPUT = "jmeter.aggregator.throughput";

        @SuppressWarnings("unchecked")
        public void updateIndexDocument(@NotNull Document doc, @NotNull BuildResultsSummary summary)
        {
            Map<String, String> data = summary.getCustomBuildData();
            String xmlData = data.get(JmeterBuildDataHelper.CUSTOM_BUILD_DATA_MAP);
            if (xmlData != null)
            {
                String xmlTotal = data.get(JmeterBuildDataHelper.CUSTOM_BUILD_DATA_TOTAL);
                XStream xstream = new XStream();
                Sampler sampler = (Sampler) xstream.fromXML(xmlTotal);

                // Store the total and xmldata unindexed.
               doc.add(new Field(JmeterBuildDataHelper.CUSTOM_BUILD_DATA_MAP, xmlData, Store.COMPRESS, Index.NO));
               doc.add(new Field(JmeterBuildDataHelper.CUSTOM_BUILD_DATA_TOTAL, xmlTotal, Store.COMPRESS,
                  Index.NO));
    }
      }
       }

    ################### JmeterResultsReader.java ###################
      package com.atlassian.bamboo.plugins.jmeter_aggregator.index;

      import java.util.Map;

      import org.apache.lucene.document.Document;
      import org.apache.lucene.document.Field;

      import com.atlassian.bamboo.index.CustomIndexReader;
      import com.atlassian.bamboo.plugins.jmeter_aggregator.builder.JmeterBuildDataHelper;
      import com.atlassian.bamboo.resultsummary.BuildResultsSummary;

      public class JmeterResultsReader implements CustomIndexReader
      {

           public void extractFromDocument(Document doc, BuildResultsSummary summary)
           {
                Map<String, String> results = summary.getCustomBuildData();
                Field dataField = doc.getField(JmeterBuildDataHelper.CUSTOM_BUILD_DATA_MAP);
                if (dataField != null)
                {
                    results.put(JmeterBuildDataHelper.CUSTOM_BUILD_DATA_MAP, dataField.stringValue());
                }
                Field totalField = doc.getField(JmeterBuildDataHelper.CUSTOM_BUILD_DATA_TOTAL);
                if (totalField != null)
                {
                   results.put(JmeterBuildDataHelper.CUSTOM_BUILD_DATA_TOTAL, totalField.stringValue());
                }
            }
       }

[错误] /C:/Users/twinnarasi/workspace/atlassian-bamboo-jmeter-aggregator/src/main/java/JmeterResultsWriter.java:[7,34] C:\Users\twinnarasi\workspace\atlassian-竹-jmeter-aggregator\src\main\java\JmeterResultsWriter.java:7:找不到符号 [错误] 符号:类 NumberTools [错误] 位置:包 org.apache.lucene.document


错误] /C:/Users/twinnarasi/workspace/atlassian-bamboo-jmeter-aggregator/src/main/java/com/atlassian/bamboo/plugins/jmeter_aggregator/index/JmeterResultsReader.java:[23,40] C:\Users\twinnarasi\workspace\atlassian-bamboo-jmeter-aggregator\src\main\java\com\atlassian\bamboo\plugins\jmeter_aggregator\index\JmeterResultsReader.java:23:不兼容的类型 [错误] 发现:org.apache.lucene.index.IndexableField [错误] 必需:org.apache.lucene.document.Field

【问题讨论】:

  • 您正在使用与 Apache Lucene 3.x 配合使用的源代码,但您使用的是 Apache Lucene 4.x。它们不兼容。
  • 谢谢。这是有道理的。但是我们将 Lucene 4.x 用于 Bamboo 5.7,我们不能降级到 3.x。最初我们正在尝试编译 JMeter Aggregator 插件(直到 5.5.1 才支持竹子)所以我认为我必须修改 Jmeteraggregator 的 pom.xml 以与 4.x 兼容
  • 我觉得不只是pom.xml的问题——这个源码直接导入org.apache.lucene.document.NumberTools,Lucene 4.x中不存在。

标签: java lucene


【解决方案1】:

如 cmets 中所述,当您使用 Lucene 4.X 时,您使用的是为 Lucene 3.X 编写的代码。 NumberTools 在 4.0 中被删除(并且自 2.9 起已被弃用,可能更早)。

对于数字字段,您应该使用适当类型的字段,而不是自己进行任何花哨的转换。例如,LongFieldIntField

如果您真的必须自己转换值,NumericUtils 将替换旧 NumberTools 的功能。所以而不是:

string s = NumberTools.longToString(longval);
//index the string...

您将改为执行以下操作:

BytesRef longvalRef = new BytesRef();
NumericUtils.longToPrefixCoded(longval, 0, longvalRef);
//index the BytesRef...

不过,您实际上应该只使用LongField。请参阅有关 NumericUtils 的注释:

注意:此 API 仅供内部使用,可能会在下一版本中以不兼容的方式进行更改。

它肯定有,例如在 4.0 和 4.10 中。

我相信您在将此代码更新到 4.X 时可能会遇到其他问题。最好看看Migration Guide

【讨论】:

  • 我在 Eclipse 中验证了项目,它报告说 import org.apache.lucene.document.NumberTools;脚本并没有真正使用。所以我删除了它。另外我在读写器文件中都修改了以下内容,现在可以成功编译了,
  • 导入 org.apache.lucene.document.Field; = 导入 o​​rg.apache.lucene.Index.IndexableField;字段 dataField = IndexableField dataField 字段 totalField = IndexableField totalField
  • JmeterResultsWriter.java" 文件删除了 import org.apache.lucene.document.NumberTools; 文件
猜你喜欢
  • 2017-10-01
  • 2018-09-28
  • 2019-03-24
  • 2018-08-09
  • 2014-06-23
  • 2017-05-07
  • 2021-08-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多