У меня есть проект, который включает в себя запись в электронную таблицу Excel (.xlsx) с использованием Apache POI XSSFWorkbook () class.
Он отлично работал в предыдущей версии Apache POI для Java 8. Недавно мы перенесли нашу кодовую базу в OpenJDK 11 и обновили нашу версию Maven для Apache POI до 4.1.0, как указано в FAQ Apache POI FAQ .
В Eclipse Сам он может генерировать таблицы Excel для моего рабочего стола, как и ожидалось (на компьютере с Win 7). Однако после создания пакета maven в файл jar версия jar не работает.
Я что-то неправильно компилирую? Фрагмент ниже (не содержит все классы, так как есть куча других классов, которые читают данные из другого источника)
private Workbook getWorkbook(String excelFilePath)
throws IOException, EncryptedDocumentException, InvalidFormatException {
Workbook workbook = null;
if (excelFilePath.endsWith("xlsx")) {
workbook = new XSSFWorkbook();
//} else if (excelFilePath.endsWith("xls")) {
//workbook = new HSSFWorkbook();
} else {
throw new IllegalArgumentException("The specified file is not Excel file");
}
return workbook;
}
public void writeReport(String excelFilePath) throws Exception {
workbook = getWorkbook(excelFilePath);
createHelper = workbook.getCreationHelper();
//Summary Sheet
TCOTSummarySheet summarySheet = new TCOTSummarySheet(workbook);
summarySheet.setProject(PROJECT);
summarySheet.setMaps(headerInfo, reportInfo, queryLinks);
summarySheet.createSheet();
//Bug Breakdown Sheet
if (bugBreakdownFlag) {
TCOTBugBreakdownSheet bugBreakdownSheet = new TCOTBugBreakdownSheet(workbook);
bugBreakdownSheet.setSummarySheet(summarySheet);
bugBreakdownSheet.setMaps(headerInfo, reportInfo, queryLinks);
bugBreakdownSheet.createSheet();
}
//Complete Write
try (FileOutputStream outputStream = new FileOutputStream(excelFilePath)) {
workbook.write(outputStream);
}
catch (Exception e) {
System.out.println(e.getLocalizedMessage());
}
workbook.close();
}
РЕДАКТИРОВАТЬ:
Чтобы дать больше контекста в всеобъемлющем project это проект JavaFX, написанный на OpenJDK 11.
Эта конкретная часть включает в себя запуск приложения Swing, выполняемого из JavaFX. На самом деле это приложение Swing использует Apache POI для генерации отчетов Excel. Возможно, это связано с проблемой многопоточности?
РЕДАКТИРОВАТЬ 2: Добавлено изображение трассировки стека
РЕДАКТИРОВАТЬ 3: Я попытался добавить зависимости javax в мой pom . xml, а также попытался добавить их в качестве внешних библиотек, на которые ссылаются, но безрезультатно.
<!-- JAXB/Javax Dependencies -->
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.4.0-b180830.0359</version>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.activation/javax.activation-api -->
<dependency>
<groupId>javax.activation</groupId>
<artifactId>javax.activation-api</artifactId>
<version>1.2.0</version>
</dependency>
Я компилировал с пакетом maven.