找不到符号:class NumberTools

cannot find symbol : class NumberTools

我不知道 java。我正在尝试使用 Eclipse 为 Bamboo 编译一个插件。我收到 java 编译错误。请帮我identify/fix这个问题。

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-bamboo-jmeter-aggregator\src\main\java\JmeterResultsWriter.java:7: 找不到符号 [错误] 符号:class 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

如评论中所述,当您使用 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 的注释:

NOTE: This API is for internal purposes only and might change in incompatible ways in the next release.

它当然有,例如在 4.0 和 4.10 中。

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