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 run配置运行良好。 现在我有:
<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不会自动拉动我的依赖项并将它们放在类路径中?
答案 0 :(得分: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依赖项,这就是你必须自己添加它的原因。至于JLine从Pig中删除的原因,你必须向该项目的开发人员询问。