AWS Lambda Java到S3-com.amazonaws.services.S3.AmazonS3ClientBuilder上的Java.lang.ClassNotFoundException
我尝试在本地运行下面的代码(作为IntelliJ中的maven项目),它运行正常。当我尝试将其作为Lambda函数运行时,总是会得到一个AWS Lambda Java到S3-com.amazonaws.services.S3.AmazonS3ClientBuilder上的Java.lang.ClassNotFoundException,java,amazon-web-services,amazon-s3,aws-lambda,aws-sdk,Java,Amazon Web Services,Amazon S3,Aws Lambda,Aws Sdk,我尝试在本地运行下面的代码(作为IntelliJ中的maven项目),它运行正常。当我尝试将其作为Lambda函数运行时,总是会得到一个java.lang.NoClassDefFoundError。不知何故,lambda使得在我包含下面的AmazonS3行时找不到该类 包示例; 导入com.amazonaws.services.lambda.runtime.Context; 导入com.amazonaws.services.lambda.runtime.RequestHandler; 导入com
java.lang.NoClassDefFoundError
。不知何故,lambda使得在我包含下面的AmazonS3行时找不到该类
包示例;
导入com.amazonaws.services.lambda.runtime.Context;
导入com.amazonaws.services.lambda.runtime.RequestHandler;
导入com.amazonaws.services.s3.AmazonS3;
导入com.amazonaws.services.s3.AmazonS3ClientBuilder;
公共类ParserLambda实现RequestHandler{
@凌驾
公共对象handleRequest(对象输入、上下文){
字符串retval=“”;
试一试{
AmazonS3 s3Client=AmazonS3ClientBuilder.standard().build();
}捕获(例外情况除外){
返回“{'status':'error','retval':'”+ex.getMessage()+“}”;
}
返回“{'status':'done','retval':'“+retval+”}”;
}
}
如果我把下面这行注释掉
//AmazonS3 s3Client=AmazonS3ClientBuilder.standard().build();
它给出:“{'status':'done','retval':'''}”
。这是一个有效的结果
未注释时
AmazonS3 s3Client=AmazonS3ClientBuilder.standard().build();
我得到:
{
"errorMessage": "com/amazonaws/services/s3/AmazonS3ClientBuilder",
"errorType": "java.lang.NoClassDefFoundError",
"stackTrace": [
"example.ParserLambda.handleRequest(ParserLambda.java:11)",
"sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)",
"sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)",
"sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)",
"java.lang.reflect.Method.invoke(Method.java:498)"
],
"cause": {
"errorMessage": "com.amazonaws.services.s3.AmazonS3ClientBuilder",
"errorType": "java.lang.ClassNotFoundException",
"stackTrace": [
"java.net.URLClassLoader.findClass(URLClassLoader.java:381)",
"java.lang.ClassLoader.loadClass(ClassLoader.java:424)",
"java.lang.ClassLoader.loadClass(ClassLoader.java:357)",
"example.ParserLambda.handleRequest(ParserLambda.java:11)",
"sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)",
"sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)",
"sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)",
"java.lang.reflect.Method.invoke(Method.java:498)"
]
}
}
我的pom文件包括:
亚马逊网站
aws java sdk
1.11.286
我也尝试过:
amazons3s3client=AmazonS3ClientBuilder.defaultClient();
AmazonS3 s3Client=AmazonS3ClientBuilder.standard()。带区域(Regions.US_EAST_1)。带ForceGlobalBucketAccessEnabled(true).build();
但是没有成功。我认为问题在于aws-java-sdk-s3没有作为aws java sdk的一部分提供给lambda函数,因此您必须将其显式地包含在.jar中 我的pom如下所示以清除错误:
<dependencies>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk</artifactId>
<version>1.11.297</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-s3</artifactId>
<version>1.11.297</version>
</dependency>
亚马逊网站
aws java sdk
1.11.297
假如
亚马逊网站
aws-java-sdk-s3
1.11.297
我遇到了同样的问题,并在几次不同的尝试后解决了它
在mypom.xml
中调整以下依赖项是不够的(请注意为aws java sdk
依赖项提供的):
亚马逊网站
感谢您指出最后一步!知道Intellij idea为什么不能正确构建包吗?
mvn package