views:

374

answers:

1

seam iText integration seems to use older version of iText jars, would it be possible to use the latest iText 5.0.2 specific jars as part of the maven dependencies. Has anyone done this before?

http://repository.jboss.org/maven2/org/jboss/seam/jboss-seam-pdf/2.2.0.GA/jboss-seam-pdf-2.2.0.GA.pom http://repository.jboss.org/maven2/com/lowagie/itext/2.1.2/itext-2.1.2.pom

The following dependency uses 2.1.2 version of iText, not sure how to make it use the latest version 5.0.2 of iText.

        <dependency>
            <groupId>org.jboss.seam</groupId>
            <artifactId>jboss-seam-pdf</artifactId>
            <version>${jboss-seam.version}</version>
            <exclusions>
                <exclusion>
                    <groupId>org.jboss.seam</groupId>
                    <artifactId>jboss-seam</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.jboss.seam</groupId>
                    <artifactId>jboss-seam-ui</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
+2  A: 

The following dependency uses 2.1.2 version of iText, not sure how to make it use the latest version 5.0.2 of iText.

First, jboss-seam-pdf-2.2.0.GA.jar has the following dependencies (skipping exclusions, refer to the root POM org.jboss.seam:root:2.2.0.GA.pom for full details):

<dependency>
  <groupId>com.lowagie</groupId>
  <artifactId>itext</artifactId>
  <version>2.1.2</version>
  ...
</dependency>
<dependency>
  <groupId>com.lowagie</groupId>
  <artifactId>itext-rtf</artifactId>
  <version>2.1.2</version>
  ...
</dependency>

Second, the only itext 5.0.2 artifact I could find is the one mentioned in this thread (and available in the repository http://maven.itextpdf.com/):

<dependency>
  <groupId>com.itextpdf</groupId>
  <artifactId>itextpdf</artifactId>
  <version>5.0.2</version>
</dependency>

As we can see it has different groupId and artifactId than the previous itext dependencies so we can't use Maven'sdependencyManagement here to force the use of this version (assuming this artifact replaces the previous one, I have no idea about this). So this leaves us with exclusions. Something like this:

<project>
  ...
  <properties>
    <jboss-seam.version>2.2.0.GA</jboss-seam.version>
  </properties>
  <repositories>
    <repository>
      <id>itext</id>
      <url>http://maven.itextpdf.com&lt;/url&gt;
    </repository>
    <repository>
      <id>jboss</id>
      <url>http://repository.jboss.org/maven2&lt;/url&gt;
    </repository>
  </repositories>
  <dependencies>
    ...
    <dependency>
      <groupId>org.jboss.seam</groupId>
      <artifactId>jboss-seam-pdf</artifactId>
      <version>${jboss-seam.version}</version>
      <exclusions>
        <exclusion>
          <groupId>org.jboss.seam</groupId>
          <artifactId>jboss-seam</artifactId>
        </exclusion>
        <exclusion>
          <groupId>org.jboss.seam</groupId>
          <artifactId>jboss-seam-ui</artifactId>
        </exclusion>
        <exclusion>
          <groupId>com.lowagie</groupId>
          <artifactId>itext</artifactId>
        </exclusion>
        <exclusion>
          <groupId>com.lowagie</groupId>
          <artifactId>itext-rtf</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
    <dependency>
      <groupId>com.itextpdf</groupId>
      <artifactId>itextpdf</artifactId>
      <version>5.0.2</version>
    </dependency>
  </dependencies>
</project>

With this POM, the dependency tree becomes:

$ mvn dependency:tree
...
[INFO] [dependency:tree {execution: default-cli}]
[INFO] com.statckoverflow:Q2793234:jar:1.0-SNAPSHOT
[INFO] +- junit:junit:jar:3.8.1:test
[INFO] +- org.jboss.seam:jboss-seam-pdf:jar:2.2.0.GA:compile
[INFO] |  \- com.sun.facelets:jsf-facelets:jar:1.1.15.B1:compile
[INFO] \- com.itextpdf:itextpdf:jar:5.0.2:compile
...

I'm not saying this will work at runtime, I'm just giving you a way to replace a dependency with Maven.

Pascal Thivent
Will give this a try and let you know
Joshua
@Joshua My answer covers the Maven part of your question. Will the code work at runtime? I don't know. But this is another story out of the scope of the question.
Pascal Thivent
Most likely it will not work on runtime. Maybe even wont compile.But I think it is quicker to just try it instead of asking here.
Shervin
@Shervin Yeah, clearly. But as I said, this goes beyond the scope of the question :)
Pascal Thivent