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不能自动提取我的依赖项并将它们放入类路径中?
1条答案
按热度按时间w6mmgewl1#
maven有一个称为传递依赖项的特性,所以您不需要´不必指定您自己的依赖项所需的库。
consolereaderinputstream在jline jar中。当您使用pig.0.8.1-cdh3u1时,您没有´不必添加jline依赖项,因为它是在pig.0.8.1-cdh3u1.pom中声明的。pig0.9.0.pom不再声明jline依赖,即´所以你必须自己加上。至于jline从pig中删除的原因,您必须询问该项目的开发人员。