Ответ Гаграварра https://stackoverflow.com/a/50472754/1497139 указывает на http://poi.apache.org/help/faq.html#faq-N10006
Я изменил код для использования в тесте JUnit, чтобы устранить ту же самую базовую проблему со следующими сообщениями об ошибках:
java.lang.NoSuchMethodError: org.apache.poi.xssf.usermodel.XSSFCell.getCellTypeEnum()Lorg/apache/poi/ss/usermodel/CellType;
Что, если сначала подумать, было вопросом обесценивания.После исправления устаревания я получил:
java.lang.NoSuchMethodError: org.apache.poi.xssf.usermodel.XSSFCell.getCellType()Lorg/apache/poi/ss/usermodel/CellType;
, который был вызван смешением файлов Apache POI 3.12 и Apache POI 4.0.1 в одном проекте.
Чтобы избежать этого в будущем, я создалследующий юнит тест.Возможно, вы захотите адаптировать версию к вашим потребностям или вообще пропустить утверждение, все еще отлаживая проблему.
JUnit Test для проверки версий POI используемых классов.
/**
* get the path the given class was loaded from
*
* @param clazz
* @return the path
*/
public String getClassLoaderPath(Class<?> clazz) {
ClassLoader classloader = clazz.getClassLoader();
String resource = clazz.getName().replaceAll("\\.", "/") + ".class";
URL res = classloader.getResource(resource);
String path = res.getPath();
return path;
}
@Test
public void testPOI() {
Class<?>[] classes = {
org.apache.poi.poifs.filesystem.POIFSFileSystem.class,
org.apache.poi.ooxml.POIXMLDocument.class,
org.apache.poi.hslf.usermodel.HSLFSlideShow.class,
org.apache.poi.xssf.usermodel.XSSFCell.class,
org.apache.poi.ss.usermodel.CellType.class};
for (Class<?> clazz : classes) {
String path = getClassLoaderPath(clazz);
if (debug)
System.out.println(
String.format("%s came from %s", clazz.getSimpleName(), path));
assertTrue(path.contains("4.0.1"));
}
}