java迫使Storm使用胖jar依赖项,而不是类路径定义的依赖项
如何告诉Storm使用胖罐子中包含的依赖项,而不是Storm类路径中的依赖项
以下是一些背景/细节:
joda-time
是所讨论的依赖项,2.0包含在{}中,2.7包含在fat jar中李> - 使用
mvn compile exec:java -Dstorm.topology=ClassName
运行拓扑似乎可以使用2.7李>- 使用
storm jar target/filename-jar-with-dependencies.jar ClassName
提交拓扑似乎使用2.0而不是2.7李>filename-jar-with-dependencies.jar
是使用mvn package
创建的:joda-time 2.7
位于依赖项部分下的pom.xml
中- 当我执行
jar tvf target/filename-jar-with-dependencies.jar | grep joda
时,会找到2.7的正确joda时间戳
- 使用
我之所以注意到这一点,是因为在通过storm
命令提交拓扑时,我看到了以下警告/错误:
WARN com.amazonaws.services.s3.internal.S3MetadataResponseHandler - Unable to parse last modified date: Mon, 25 May 2015 13:23:29 GMT
java.lang.IllegalStateException: Joda-time 2.2 or later version is required, but found version: 2.0
at com.amazonaws.util.DateUtils.handleException(DateUtils.java:156) ~[filename-jar-with-dependencies.jar:na]
at com.amazonaws.util.DateUtils.parseRFC822Date(DateUtils.java:204) ~[filename-jar-with-dependencies.jar:na]
at com.amazonaws.services.s3.internal.ServiceUtils.parseRfc822Date(ServiceUtils.java:78) ~[filename-jar-with-dependencies.jar:na]
at com.amazonaws.services.s3.internal.AbstractS3ResponseHandler.populateObjectMetadata(AbstractS3ResponseHandler.java:115) ~[filename-jar-with-dependencies.jar:na]
at com.amazonaws.services.s3.internal.S3ObjectResponseHandler.handle(S3ObjectResponseHandler.java:52) [filename-jar-with-dependencies.jar:na]
at com.amazonaws.services.s3.internal.S3ObjectResponseHandler.handle(S3ObjectResponseHandler.java:30) [filename-jar-with-dependencies.jar:na]
at com.amazonaws.http.AmazonHttpClient.handleResponse(AmazonHttpClient.java:1050) [filename-jar-with-dependencies.jar:na]
at com.amazonaws.http.AmazonHttpClient.executeOneRequest(AmazonHttpClient.java:724) [filename-jar-with-dependencies.jar:na]
at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:467) [filename-jar-with-dependencies.jar:na]
at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:302) [filename-jar-with-dependencies.jar:na]
at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:3672) [filename-jar-with-dependencies.jar:na]
at com.amazonaws.services.s3.AmazonS3Client.getObject(AmazonS3Client.java:1160) [filename-jar-with-dependencies.jar:na]
Caused by: java.lang.IllegalArgumentException: Invalid format: "Mon, 25 May 2015 13:23:29 GMT" is malformed at "GMT"
at org.joda.time.format.DateTimeFormatter.parseMillis(DateTimeFormatter.java:747) ~[joda-time-2.0.jar:2.0]
at com.amazonaws.util.DateUtils.parseRFC822Date(DateUtils.java:202) ~[filename-jar-with-dependencies.jar:na]
... 15 common frames omitted
# 1 楼答案
在阅读this post之后,我发现了一个解决方法,那就是用最新版本替换Storm的
/lib
目录中的库(在我的例子中是joda-time
)。默认情况下,该目录中的jar文件显示在storm classpath
中我希望有一个更好的答案,以防图书馆的两个版本出于某种原因需要共存
# 2 楼答案
对于Maven 3.3.3和“Wildfly 9.0.0-RC2”,我需要添加pom。xml
这解决了我的问题
如果您查看“aws sdk java”的源代码,您将看到以下验证。 https://github.com/aws/aws-sdk-java/blob/1.10.1/aws-java-sdk-core/src/main/java/com/amazonaws/util/DateUtils.java