pig-0.9.0.pom并不包含它的所有运行时依赖项,比如pig-0.8.1-cdh3u1.pom

velaa5lx  于 2021-06-21  发布在  Pig
关注(0)|答案(1)|浏览(285)

maven noob,耐心点。。。我正在从cdh3u1升级到apachehadoop0.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内部使用junitrun配置运行它们非常有效。现在我有:

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

我没有发现ClassDefFoundError:jline/consolereReaderInputStream在运行时。我最后手动添加了所有这些依赖项,直到成功:

<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不能自动提取我的依赖项并将它们放入类路径中?

w6mmgewl

w6mmgewl1#

maven有一个称为传递依赖项的特性,所以您不需要´不必指定您自己的依赖项所需的库。
consolereaderinputstream在jline jar中。当您使用pig.0.8.1-cdh3u1时,您没有´不必添加jline依赖项,因为它是在pig.0.8.1-cdh3u1.pom中声明的。pig0.9.0.pom不再声明jline依赖,即´所以你必须自己加上。至于jline从pig中删除的原因,您必须询问该项目的开发人员。

相关问题