2

maven noob,请耐心等待...我正在从 cdh3u1 升级到 apache hadoop 0.20.203.0 和 pig 0.9.0。我曾经有:

    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-core</artifactId>
        <version>0.20.2-cdh3u1</version>
    </dependency>
    <dependency>
        <groupId>org.apache.pig</groupId>
        <artifactId>pig</artifactId>
        <version>0.8.1-cdh3u1</version>
    </dependency>

并从 Eclipse 内部运行它们,使用 junit 运行配置效果很好。我现在有:

    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-core</artifactId>
        <version>0.20.203.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.pig</groupId>
        <artifactId>pig</artifactId>
        <version>0.9.0</version>
    </dependency>

我得到了 NoClassDefFoundError: jline/ConsoleReaderInputStream 在运行时。我最终手动添加了所有这些依赖项,直到它起作用:

    <dependency>
        <groupId>jline</groupId>
        <artifactId>jline</artifactId>
        <version>0.9.94</version>
    </dependency>   
    <dependency>
        <groupId>org.antlr</groupId>
        <artifactId>antlr-runtime</artifactId>
        <version> 3.2 </version> <- this is 3.0.1 in cdh3u1, but probably changed in pig 0.9.0
    </dependency>      
    <dependency>
        <groupId>com.google.guava</groupId>
        <artifactId>guava</artifactId>
        <version>r06</version>
    </dependency>

是什么赋予了?为什么 Maven 不自动拉出我的依赖项并将它们放在类路径中?

4

1 回答 1

2

Maven 有一个名为Transitive dependencies的特性,因此您不必指定您自己的依赖项所需的库。

ConsoleReaderInputStream 在 Jline JAR 中。当您使用 Pig.0.8.1-cdh3u1 时,您不必添加 Jline 依赖项,因为它是在Pig.0.8.1-cdh3u1.pom中声明的。Pig 0.9.0.pom不再声明 Jline 依赖项,这就是您必须自己添加它的原因。至于从 Pig 中删除 JLine 的原因,您必须询问该项目的开发人员。

于 2012-06-04T19:11:54.573 回答