1

I have a little experimental project managed by Maven. It uses a library for generating PDFs. This is my pom.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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>br.com.brandizzi.adam.pdfize</groupId>
    <artifactId>pdfize</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <dependencies>
        <dependency>
            <groupId>org.xhtmlrenderer</groupId>
            <artifactId>core-renderer</artifactId>
            <version>R8pre2</version>
            <scope>runtime</scope>
        </dependency>
    </dependencies>
</project>

It has only one class:

package br.com.brandizzi.adam.pdfize;
//

public class Main {

    public static void main(String[] args) throws DocumentException,
            MalformedURLException, FileNotFoundException {

        String inputUrl = new File(args[0]).toURI().toURL().toString();
        OutputStream pdf = new FileOutputStream(args[1]);

        ITextRenderer renderer = new ITextRenderer();
        renderer.setDocument(inputUrl);
        renderer.layout();
        renderer.createPDF(pdf);

    }
}

When I run mvn compile, however, I get this error:

$ mvn compile
[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building pdfize 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-resources-plugin:2.5:resources (default-resources) @ pdfize ---
[debug] execute contextualize
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 0 resource
[INFO] 
[INFO] --- maven-compiler-plugin:2.3.2:compile (default-compile) @ pdfize ---
[WARNING] File encoding has not been set, using platform encoding UTF-8, i.e. build is platform dependent!
[INFO] Compiling 1 source file to /home/adam/software/workspaces/test/pdfize/target/classes
[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR : 
[INFO] -------------------------------------------------------------
[ERROR] /home/adam/software/workspaces/test/pdfize/src/main/java/br/com/brandizzi/adam/pdfize/Main.java:[9,28] error: package org.xhtmlrenderer.pdf does not exist
[ERROR] /home/adam/software/workspaces/test/pdfize/src/main/java/br/com/brandizzi/adam/pdfize/Main.java:[11,23] error: package com.lowagie.text does not exist
[ERROR] /home/adam/software/workspaces/test/pdfize/src/main/java/br/com/brandizzi/adam/pdfize/Main.java:[38,3] error: cannot find symbol
[ERROR]  class Main
/home/adam/software/workspaces/test/pdfize/src/main/java/br/com/brandizzi/adam/pdfize/Main.java:[29,11] error: cannot find symbol
[ERROR]  class Main
/home/adam/software/workspaces/test/pdfize/src/main/java/br/com/brandizzi/adam/pdfize/Main.java:[43,2] error: cannot find symbol
[ERROR]  class Main
/home/adam/software/workspaces/test/pdfize/src/main/java/br/com/brandizzi/adam/pdfize/Main.java:[43,31] error: cannot find symbol
[INFO] 6 errors 
[INFO] -------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.094s
[INFO] Finished at: Sat Mar 30 21:36:59 BRT 2013
[INFO] Final Memory: 9M/106M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.3.2:compile (default-compile) on project pdfize: Compilation failure: Compilation failure:
[ERROR] /home/adam/software/workspaces/test/pdfize/src/main/java/br/com/brandizzi/adam/pdfize/Main.java:[9,28] error: package org.xhtmlrenderer.pdf does not exist
[ERROR] /home/adam/software/workspaces/test/pdfize/src/main/java/br/com/brandizzi/adam/pdfize/Main.java:[11,23] error: package com.lowagie.text does not exist
[ERROR] /home/adam/software/workspaces/test/pdfize/src/main/java/br/com/brandizzi/adam/pdfize/Main.java:[38,3] error: cannot find symbol
[ERROR] class Main
[ERROR] /home/adam/software/workspaces/test/pdfize/src/main/java/br/com/brandizzi/adam/pdfize/Main.java:[29,11] error: cannot find symbol
[ERROR] class Main
[ERROR] /home/adam/software/workspaces/test/pdfize/src/main/java/br/com/brandizzi/adam/pdfize/Main.java:[43,2] error: cannot find symbol
[ERROR] class Main
[ERROR] /home/adam/software/workspaces/test/pdfize/src/main/java/br/com/brandizzi/adam/pdfize/Main.java:[43,31] error: cannot find symbol
[ERROR] -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException

What is going wrong?

brandizzi
  • 26,083
  • 8
  • 103
  • 158

1 Answers1

3

The problem is that the dependency configuration is set up to the runtime scope when one should use the compile scope. So, the <dependency> element on the pom.xml should be changed to be like this:

<dependencies>
    <dependency>
        <groupId>org.xhtmlrenderer</groupId>
        <artifactId>core-renderer</artifactId>
        <version>R8pre2</version>
        <scope>compile</scope> <!-- <== NOTE THE DIFFERENCE -->
    </dependency>
</dependencies>

Of course, this raises a question about why would I try to use the runtime scope in the first place. I was trying to build a JAR with all dependencies and, if you are trying to do it too, there is no point on changing the scope. Instead, follow this awesome answer.

Community
  • 1
  • 1
brandizzi
  • 26,083
  • 8
  • 103
  • 158