找不到符号: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 以来已被弃用,可能更早)。
对于数字字段,您应该使用适当的字段类型,而不是花哨地自行转换它。例如 LongField
或 IntField
。
如果您真的必须自己转换值,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.
我不知道 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 以来已被弃用,可能更早)。
对于数字字段,您应该使用适当的字段类型,而不是花哨地自行转换它。例如 LongField
或 IntField
。
如果您真的必须自己转换值,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.