Maven在编译类型中找不到依赖项

时间:2013-03-31 01:03:44

标签: java maven maven-3

我有一个由Maven管理的小实验项目。它使用库来生成PDF。这是我的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>

它只有一个类:

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);

    }
}

然而,当我运行mvn compile时,我收到此错误:

$ 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

出了什么问题?

1 个答案:

答案 0 :(得分:3)

问题是,当应该使用runtime范围时,依赖关系配置会设置为compile范围。因此,<dependency>上的pom.xml元素应更改为:

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

当然,这引发了一个关于为什么首先尝试使用runtime范围的问题。我试图构建一个包含所有依赖项的JAR,如果您也尝试这样做,那么更改范围就没有意义了。相反,请遵循此awesome answer