Java ApachePOI写入Excel在Eclipse中工作,但在OpenJDK11中编译到Jar后不能工作

Java ApachePOI写入Excel在Eclipse中工作,但在OpenJDK11中编译到Jar后不能工作,java,excel,apache-poi,openjdk-11,Java,Excel,Apache Poi,Openjdk 11,我有一个项目,涉及使用ApachePois XSSFWorkbook()类写入Excel电子表格(.xlsx) 它在早期版本的ApachePOIforJava8中运行良好。最近,我们将代码库迁移到OpenJDK 11,并将ApachePOI的Maven版本更新为常见问题解答中指定的4.1.0 在Eclipse本身中,它能够按照预期(在Win7机器上)在我的桌面上生成excel工作表。但是,在将maven包放入jar文件之后,jar版本就不起作用了 我是不是编错了? 下面的代码段(不包含所有类,因

我有一个项目,涉及使用ApachePois XSSFWorkbook()类写入Excel电子表格(.xlsx)

它在早期版本的ApachePOIforJava8中运行良好。最近,我们将代码库迁移到OpenJDK 11,并将ApachePOI的Maven版本更新为常见问题解答中指定的4.1.0

在Eclipse本身中,它能够按照预期(在Win7机器上)在我的桌面上生成excel工作表。但是,在将maven包放入jar文件之后,jar版本就不起作用了

我是不是编错了? 下面的代码段(不包含所有类,因为还有一堆其他类从其他源读入数据)

编辑:

为了给总体项目提供更多的上下文,它是一个用OpenJDK 11编写的JavaFX项目

这一特定部分涉及运行从JavaFX执行的Swing应用程序。这个Swing应用程序实际上是使用ApachePOI生成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>

javax.xml.bind
jaxb api
2.4.0-b180830.0359
javax.activation
javax.activation-api
1.2.0

我一直在使用maven包进行编译。

问题在于自定义运行时映像不包括jdk.charset


在使用jlink应用程序创建apache poi使用的运行时时,需要包括jdk.charset。

引发了什么错误?请显示堆栈跟踪。嗨@AxelRichter,有趣的是我没有收到任何堆栈跟踪错误。我甚至从cmd行运行jar来获取控制台读数。在.write()命令上,它似乎以静默方式失败,但没有引发实际的stacktrace错误。我试图通过
try(FileOutputStream outputStream=newfileoutputstream(excelFilePath)){workbook.write(outputStream);}catch(异常e){System.out.println(e.getLocalizedMessage());}添加显式打印
但仍然没有stacktrace@AxelRichter在将整个swing应用程序移植到JavaFX之后,问题是相同的。它成功地从Eclipse编译器生成excel文档,但在jar中失败。但是,我能够获得java.lang.ExceptionInInitializerError。如果不知道完整的堆栈跟踪,则无法获得任何帮助。将所有代码放在
中,尝试{…}catch(Throwable e){e.printStackTrace();}
。然后显示抛出的完整堆栈跟踪。@AxelRichter我添加了我能够生成的堆栈跟踪的图片。这似乎是一个单元合并问题,但我的问题是,为什么这个问题只发生在已编译的jar中,而不发生在Eclipse中?感谢您指出这个问题。您是如何处理丢失的jdk.charset的?以正确的方式修补OpenJDK的过程是什么?@martinotovmassian这应该有帮助:。在OpenJDK中创建自定义JRE时,需要列出jdk.charsets模块。希望有帮助!
<!-- 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>