如何告诉Storm使用胖子jar中包含的依赖项而不是Storm类路径中的依赖?
以下是一些背景/细节:
response_msg.setCorrelationId( request_msg.id( ) );
是有问题的依赖项,joda-time
中包含2.0,胖jar中包含2.7。storm classpath
运行拓扑似乎使用2.7就好了。mvn compile exec:java -Dstorm.topology=ClassName
提交拓扑似乎使用2.0而不是2.7。storm jar target/filename-jar-with-dependencies.jar ClassName
是使用filename-jar-with-dependencies.jar
创建的:
mvn package
位于“依赖项”部分下的joda-time 2.7
pom.xml
我甚至注意到这一点的原因是我在通过jar tvf target/filename-jar-with-dependencies.jar | grep joda
命令提交拓扑时看到以下警告/错误:
storm
答案 0 :(得分:1)
我在阅读this post后找到的一个解决方法是使用较新版本替换Storm joda-time
目录中的库(在我的情况下为/lib
),因为该目录中的所有.jar文件都显示默认为storm classpath
。
我希望有一个更好的答案,以防图书馆的两个版本因某种原因需要共存。
答案 1 :(得分:1)
在我使用Maven 3.3.3和Wildfly 9.0.0-RC2'的情况下,我需要在pom.xml中添加
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.8.1</version>
</dependency>
这解决了我的问题。
如果你看一下&#39; aws-sdk-java&#39;的源代码。您将看到以下验证。 https://github.com/aws/aws-sdk-java/blob/1.10.1/aws-java-sdk-core/src/main/java/com/amazonaws/util/DateUtils.java
/**
* Returns the original runtime exception iff the joda-time being used
* at runtime behaves as expected.
*
* @throws IllegalStateException if the joda-time being used at runtime
* doens't appear to be of the right version.
*/
private static <E extends RuntimeException> E handleException(E ex) {
if (JodaTime.hasExpectedBehavior())
return ex;
throw new IllegalStateException("Joda-time 2.2 or later version is required, but found version: " + JodaTime.getVersion(), ex);
}