加载罐子的顺序

时间:2016-03-12 01:50:38

标签: java hadoop classpath classloader emr

假设类路径上有两个不同库版本的jar,例如

java -cp A-2.1.jar:A-2.2.jar ...

第一个和第二个jar中的包和类名是相同的,但类实现是不同的。是否指定root jvm类加载器是否会在A-2.2之前尝试在A-2.1中查找类?

问题是AWS EMR将hadoop jar添加到类路径中,并且其某些依赖项是旧版本。但是,我们的应用程序需要使用相同库的新版本,因此在使用较新版本的库的情况下使用类路径的前置是否足够,或者在这种情况下是否考虑了推荐的做法? http://docs.aws.amazon.com/ElasticMapReduce/latest/DeveloperGuide/emr-hadoop-config_hadoop-user-env.sh.html

1 个答案:

答案 0 :(得分:1)

来自Setting the Class Path文档:

  

指定多个类路径条目的顺序是   重要。 Java解释器将在中查找类   目录按它们出现在类路径变量中的顺序。

那就是说,覆盖另一个库的依赖JAR总是有风险的,因为库提供者可能没有测试过这种组合,所以你要么要求他们保证,做自己的测试,或者阴影/按照你的建议重新打包课程。