首页 > 解决方案 > Apache FOP:添加 Apache FOP Maven 依赖项后的错误列表

问题描述

现在我正在开发一个调用 SOAP Web 服务的 JDK-14 应用程序,在收到 XML 结果之后,它必须调用一个方法来通过 Apache FOP 库生成 PDF 文档。请注意,我没有在这个项目中使用module-info.java

这是我当前在 Maven 中的依赖项列表。所有项目都在正常运行。但是添加了两个 Apache FOP 依赖项之后(见下文),就无法再编译和运行应用程序了。

<dependencies>
        <!-- Dependencies for XML marshaling and more -->
        <dependency>
            <groupId>jakarta.xml.bind</groupId>
            <artifactId>jakarta.xml.bind-api</artifactId>
            <version>2.3.3</version>
        </dependency>
        <!-- Runtime -->
        <dependency>
            <groupId>org.glassfish.jaxb</groupId>
            <artifactId>jaxb-runtime</artifactId>
            <version>2.3.3</version>
            <scope>runtime</scope>
        </dependency>
        <!-- Dependencies for Web Service -->
        <dependency>
            <groupId>jakarta.xml.ws</groupId>
            <artifactId>jakarta.xml.ws-api</artifactId>
            <version>2.3.3</version>
        </dependency>
        <dependency>
            <groupId>jakarta.jws</groupId>
            <artifactId>jakarta.jws-api</artifactId>
            <version>2.1.0</version>
        </dependency>
        <dependency>
            <groupId>com.sun.xml.ws</groupId>
            <artifactId>rt</artifactId>
            <version>2.3.3</version>
        </dependency>
        <!-- Dependencies for Apache PDF -->
        <dependency>
            <groupId>org.apache.xmlgraphics</groupId>
            <artifactId>xmlgraphics-commons</artifactId>
            <version>2.4</version>
        </dependency>
        <dependency>
            <groupId>org.apache.xmlgraphics</groupId>
            <artifactId>fop</artifactId>
            <version>2.5</version>
        </dependency>
        <!--Dependencies for QR Code-->
        <dependency>
            <groupId>com.google.zxing</groupId>
            <artifactId>core</artifactId>
            <version>3.4.0</version>
        </dependency>
        <dependency>
            <groupId>com.google.zxing</groupId>
            <artifactId>javase</artifactId>
            <version>3.4.0</version>
        </dependency>
</dependencies>

错误消息不同于:

import javax.xml.namespace.QName;
The package javax.xml.namespace is accessible from more than one module: <unnamed>, java.xmlJava(8390063)

import javax.xml.transform.Result;
The package javax.xml.transform is accessible from more than one module: <unnamed>, java.xmlJava(8390063)

import javax.xml.transform.sax.SAXResult;
The package javax.xml.transform.sax is accessible from more than one module: <unnamed>, java.xmlJava(8390063)

import javax.xml.transform.stream.StreamSource;
The package javax.xml.transform.stream is accessible from more than one module: <unnamed>, java.xmlJava(8390063)

import javax.xml.parsers.DocumentBuilderFactory;
The package javax.xml.parsers is accessible from more than one module: <unnamed>, java.xmlJava(8390063)

我想知道我该如何处理这个问题。也许在冲突的特定依赖项中使用排除标记?

PD。最后,只需从命令行直接调用 Apache FOP jar 即可生成 PDF 文档。

java -jar fop.jar -r -xml <xml_path> -xsl <xsl_path> -param name1 value1 -param name2 value2 ... myPDF.pdf

但我想知道(1)是否仍然可以通过代码进行配置。以及(2)为什么现在会发生这种情况。在迁移到 JDK-14 之前,该项目使用 JDK-11 和 JDK-13 运行。

标签: javaxmlmavenapache-fopjava-14

解决方案


我不太确定为什么最近的 JDK 会出现这个问题。

JDK-8,没关系。

当然,javax.xmlxml-apis依赖于apache-fop和 in JDK-14,但之前也是如此。

但无论如何,以下dependency-exclusion解决了我在JDK-14using下的问题Eclipse-2020-06

<!DOCTYPE xml>
<project
        xmlns="http://maven.apache.org/POM/4.0.0"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>
    <groupId>com.stackoverflow</groupId>
    <artifactId>apache.fop.jdk14.exclude.xml-apis</artifactId>
    <version>0.0.1-SNAPSHOT</version>

    <properties>
        <maven.compiler.target>14</maven.compiler.target>
        <maven.compiler.source>14</maven.compiler.source>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.apache.xmlgraphics</groupId>
            <artifactId>fop</artifactId>
            <version>2.5</version>
            <exclusions><exclusion><groupId>xml-apis</groupId><artifactId>*</artifactId></exclusion></exclusions>
        </dependency>
    </dependencies>
</project>

推荐阅读