提问者:小点点

向Maven JavaFx项目添加poi-ooxml依赖项会给我这个错误-Provider类org. apache.bsf.BSFManager不在模块中


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

初始化引导层时发生错误java. lang.module.FindException:无法为C:\用户\R\.m2\repository\xalan\xalan\2.7.2\xalan-2.7.2派生模块描述符。jar由以下原因引起:java.lang.module.InvalidModuleDESptorException:Provider 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>

这是我的module-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;

}

我该如何解决这个问题?


共1个答案

匿名用户

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

Maven下载batik和其他依赖项,例如ad xalan,这些依赖项不是工作所必需的。因此,除了我将提到的几个依赖项之外,不要为此使用Maven。

>

  • 从poi.apache.org下载并解压官方poi二进制zip

    从下载和解压的zip中,导航到辅助文件夹并修改batik-all-1.13中的META-INF/services/org. apache.batik.script.解释性工厂文件。jar使用vim或vi。注释掉“org.apache.batik.bridge.Rhino解释性工厂”行并保存。

    从以下目录中添加所有jar文件作为外部库:-辅助库、lib和ooxml-lib。添加poi-5.0.0目录中除poi-ooxml-full-5.0.0之外的所有jar。jar。

    在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>