将 poi-ooxml 依赖项添加到 Maven JavaFx 项目给我这个错误 - Provider class org.apache.bsf.BSFManager not in module

Adding poi-ooxml dependency to Maven JavaFx project gives me this error - Provider class org.apache.bsf.BSFManager not in module

我想使用 apache poi 和 poi-ooxml 写入 xlsx 文件。我创建了一个新的 maven 命令行项目,添加了依赖项并且它工作正常。 但是,如果我创建一个新的 JavaFX Maven 项目并添加 poi 和 poi-ooxml 依赖项,我会收到以下错误。

引导层初始化出错 java.lang.module.FindException: 无法导出 C:\Users\R\.m2\repository\xalan\xalan.7.2\xalan-2.7.2.jar 的模块描述符 由以下原因引起:java.lang.module.InvalidModuleDescriptorException:提供商 class org.apache.bsf.BSFManager 不在模块中。

这是我的 pom.xml 文件:

<modelVersion>4.0.0</modelVersion>
<groupId>com.ridoo</groupId>
<artifactId>MavenFXTest</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>11</maven.compiler.source>
    <maven.compiler.target>11</maven.compiler.target>
</properties>
<dependencies>
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi</artifactId>
        <version>5.0.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>5.0.0</version>
    </dependency>
    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-controls</artifactId>
        <version>11.0.2</version>
    </dependency>
    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-fxml</artifactId>
        <version>11.0.2</version>
    </dependency>
</dependencies>
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.0</version>
            <configuration>
                <release>11</release>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-maven-plugin</artifactId>
            <version>0.0.4</version>
            <configuration>
                <mainClass>com.ridoo.App</mainClass>
            </configuration>
        </plugin>
    </plugins>
</build>

这是我的模块-info.java文件

module com.ridoo {
requires javafx.controls;
requires javafx.fxml;
requires org.apache.poi.ooxml;
requires org.apache.poi.poi;

opens com.ridoo to javafx.fxml;
exports com.ridoo;

}

我该如何解决这个问题?

对于需要启动 poi-ooxml 和 运行 的任何人,这是我的解决方案。

Maven 下载不需要此功能的 batik 和其他依赖项,例如 ad xalan。因此,除了我要提到的几个依赖项之外,不要为此使用 Maven。

  1. poi.apache.org

    下载并解压官方 poi 二进制 zip
  2. 从下载并解压的 zip 文件中,导航到辅助文件夹并修改 batik-all-1.13.jar 中的 META-INF/services/org.apache.batik.script.InterpreterFactory 文件使用 vim 或 vi。注释掉“org.apache.batik.bridge.RhinoInterpreterFactory”行并保存。

  3. 将以下目录中的所有 jar 文件添加为外部库: -auxilliary、lib 和 ooxml-lib。添加 poi-5.0.0 目录中的所有 jar,除了 poi-ooxml-full-5.0.0.jar.

  4. 从 maven 添加以下依赖项,一切顺利:

     <dependency>
         <groupId>org.slf4j</groupId>
         <artifactId>jcl-over-slf4j</artifactId>
         <version>1.7.30</version>
     </dependency>
     <dependency>
         <groupId>org.slf4j</groupId>
         <artifactId>slf4j-api</artifactId>
         <version>1.7.30</version>
     </dependency>