假设一个类路径上有两个不同库版本的jar,例如。
java -cp A-2.1.jar:A-2.2.jar ...
第一个jar和第二个jar中的包和类名相同,但类实现不同。是否指定了根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条答案
按热度按时间shstlldc1#
通过设置类路径文档:
指定多个类路径项的顺序很重要。java解释器将按照类路径变量中出现的顺序在目录中查找类。
也就是说,重写另一个库的依赖关系jar总是有风险的,因为库提供者可能没有测试过这种组合,所以您需要请求他们确认,自己进行测试,或者按照您的建议对类进行着色/重新打包。