module-info.java using fop 2.5

[email protected]
Newsgroups gmane.text.xml.fop.user
Message-ID <CAM-hvXchfet25P=wibbWrsOX+tGMTKhqYo+zFhfT6+J=Zvgi3g@mail.gmail.com>
Reporting my experience setting up a module-info.java for a project using
FOP.

By way of background, here's the maven dependency tree

[INFO] +- org.apache.xmlgraphics:fop:jar:2.5:compile
[INFO] |  +- org.apache.xmlgraphics:fop-util:jar:2.5:compile
[INFO] |  +- org.apache.xmlgraphics:fop-events:jar:2.5:compile
[INFO] |  |  +- com.thoughtworks.qdox:qdox:jar:1.12:compile
[INFO] |  |  \- org.apache.ant:ant:jar:1.8.2:compile
[INFO] |  |     \- org.apache.ant:ant-launcher:jar:1.8.2:compile
[INFO] |  \- org.apache.xmlgraphics:fop-core:jar:2.5:compile
[INFO] |     +- org.apache.xmlgraphics:batik-anim:jar:1.13:compile
[INFO] |     |  +- org.apache.xmlgraphics:batik-css:jar:1.13:compile
[INFO] |     |  +- org.apache.xmlgraphics:batik-dom:jar:1.13:compile
[INFO] |     |  +- org.apache.xmlgraphics:batik-ext:jar:1.13:compile
[INFO] |     |  +- org.apache.xmlgraphics:batik-parser:jar:1.13:compile
[INFO] |     |  +-
org.apache.xmlgraphics:batik-shared-resources:jar:1.13:compile
[INFO] |     |  +- org.apache.xmlgraphics:batik-svg-dom:jar:1.13:compile
[INFO] |     |  \- org.apache.xmlgraphics:batik-util:jar:1.13:compile
[INFO] |     |     +-
org.apache.xmlgraphics:batik-constants:jar:1.13:compile
[INFO] |     |     \- org.apache.xmlgraphics:batik-i18n:jar:1.13:compile
[INFO] |     +- org.apache.xmlgraphics:batik-awt-util:jar:1.13:compile
[INFO] |     +- org.apache.xmlgraphics:batik-bridge:jar:1.13:compile
[INFO] |     |  +- org.apache.xmlgraphics:batik-script:jar:1.13:compile
[INFO] |     |  \- org.apache.xmlgraphics:batik-xml:jar:1.13:compile
[INFO] |     +- org.apache.xmlgraphics:batik-extension:jar:1.13:compile
[INFO] |     +- org.apache.xmlgraphics:batik-gvt:jar:1.13:compile
[INFO] |     +- org.apache.xmlgraphics:batik-transcoder:jar:1.13:compile
[INFO] |     |  \- org.apache.xmlgraphics:batik-svggen:jar:1.13:compile
[INFO] |     +- javax.servlet:servlet-api:jar:2.2:compile
[INFO] |     +- org.apache.pdfbox:fontbox:jar:2.0.16:compile
[INFO] |     +- javax.media:jai-core:jar:1.1.3:compile
[INFO] |     \- com.sun.media:jai-codec:jar:1.1.3:compile

The fop jar packages fop-util, fop-events, and fop-core, so you want either
the all-in-one jar, or the other 3 jars, but not both.

If you have both, you'll get an error like:  The package
org.apache.fop.configuration is accessible from more than one module: fop,
fop.core

So which way to go, the fop all-in-one jar. or the other three?

The answer for now at least is to use the fop all-in-one jar.  If you were
to try using the other three jars as modules, you get:

  Error occurred during initialization of boot layer
java.lang.module.ResolutionException: Modules fop.core and fop.events
export package org.apache.fop.tools to module error.prone.annotations

So here are the requires statements I ended up with:

 requires fop;
// deps of org.apache.xmlgraphics:fop-core:jar:2.5
requires batik.anim;
requires batik.css;
requires batik.dom;
requires batik.ext;
requires batik.parser;
requires batik.shared.resources;
requires batik.svg.dom;
requires batik.util;
requires batik.constants;
requires batik.i18n;
requires batik.awt.util;
requires batik.bridge;
//requires batik.script;
requires batik.extension;
requires batik.gvt;
requires batik.transcoder;
requires batik.svggen;
requires org.apache.fontbox; // has an Automatic-Module-Name in its
MANIFEST.MF
//requires jai.core;
//requires jai.codec;

batik.script is commented out, because including it results in the
following error:

  Error occurred during initialization of boot layer
java.lang.module.FindException: Unable to derive module descriptor for
/home/jharrop/.m2/repository/org/apache/xmlgraphics/batik-script/1.13/batik-script-1.13.jar
Caused by: java.lang.module.InvalidModuleDescriptorException: Provider
class org.apache.batik.bridge.RhinoInterpreterFactory not in module

Using fop all-in-one but excluding the duplicate classes is a bit of a pain
from a Maven point of view, since you then have to explicitly include the
fop-core deps.  Here is what I ended up with:

 <dependency>
<groupId>org.apache.xmlgraphics</groupId>
<artifactId>fop</artifactId>
<version>2.5</version>
<exclusions>
<!-- exclude duplicate classes -->
<exclusion>
<groupId>org.apache.xmlgraphics</groupId>
<artifactId>fop-core</artifactId>
</exclusion>
<exclusion>
<groupId>org.apache.xmlgraphics</groupId>
<artifactId>fop-util</artifactId>
</exclusion>
<exclusion>
<groupId>org.apache.xmlgraphics</groupId>
<artifactId>fop-events</artifactId>
</exclusion>
<!-- other  -->
<exclusion>
<groupId>xml-apis</groupId>
<artifactId>xml-apis</artifactId>
</exclusion>
<exclusion>
<groupId>xml-apis</groupId>
<artifactId>xml-apis-ext</artifactId>
</exclusion>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
<exclusion>
<groupId>xalan</groupId>
<artifactId>xalan</artifactId>
</exclusion>
<exclusion>
<groupId>xalan</groupId>
<artifactId>serializer</artifactId>
</exclusion>
</exclusions>
</dependency>

<!--  so we need to include fop-core deps directly -->
    <!-- batik deps -->
<dependency>
<groupId>org.apache.xmlgraphics</groupId>
<artifactId>batik-anim</artifactId>
<version>1.13</version>
</dependency>
<dependency>
<groupId>org.apache.xmlgraphics</groupId>
<artifactId>batik-awt-util</artifactId>
<version>1.13</version>
</dependency>
<dependency>
<groupId>org.apache.xmlgraphics</groupId>
<artifactId>batik-bridge</artifactId>
<version>1.13</version>
</dependency>
<dependency>
<groupId>org.apache.xmlgraphics</groupId>
<artifactId>batik-extension</artifactId>
<version>1.13</version>
</dependency>
<dependency>
<groupId>org.apache.xmlgraphics</groupId>
<artifactId>batik-gvt</artifactId>
<version>1.13</version>
</dependency>
<dependency>
<groupId>org.apache.xmlgraphics</groupId>
<artifactId>batik-transcoder</artifactId>
<version>1.13</version>
</dependency>
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>fontbox</artifactId>
<version>2.0.19</version>
</dependency>
<!--
<dependency>
<groupId>javax.media</groupId>
<artifactId>jai-core</artifactId>
<version>1.1.3</version>
</dependency>
<dependency>
<groupId>com.sun.media</groupId>
<artifactId>jai-codec</artifactId>
<version>1.1.3</version>
</dependency>
 -->
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.