【问题标题】:AmazonSNSClient noClassDefFoundAmazonSNSClient noClassDefFound
【发布时间】:2018-06-14 09:32:16
【问题描述】:

我目前正在尝试针对 AWS 进行编码,但在尝试为用户订阅 SNS 主题时遇到了问题。

所以我有一个 lambda 表达式,它应该接收电子邮件并将其发送到 SNS。我可以调用表达式,它工作正常,但是当它尝试创建 AmazonSNSClient 时,我得到一个 java.lang.NoClassDefFoundError: com/amazonaws/services/sns/AmazonSNSClient

代码很简单:

public String handleRequest(SubscriptionRequest request, Context context) {
    LambdaLogger logger = context.getLogger();
    logger.log("Subscribing to list with email:" + request.email);
    logger.log("Creating SNS client");
    AmazonSNSClient snsClient = new AmazonSNSClient(new AnonymousAWSCredentials());
    snsClient.setRegion(Region.getRegion(Regions.EU_WEST_1));
    //subscribe to an SNS topic
    SubscribeRequest subRequest = new SubscribeRequest(TOPIC_ARN, "email", request.email);
    logger.log("Sending request");
    snsClient.subscribe(subRequest);
    return "OK";
}

其中可能还有很多其他错误,但这就是我目前得到的,具有以下依赖项

<dependencies>
    <dependency>
        <groupId>com.amazonaws</groupId>
        <artifactId>aws-lambda-java-core</artifactId>
        <version>1.2.0</version>
    </dependency>
    <dependency>
        <groupId>com.amazonaws</groupId>
        <artifactId>aws-lambda-java-events</artifactId>
        <version>2.1.0</version>
    </dependency>
    <dependency>
        <groupId>com.amazonaws</groupId>
        <artifactId>aws-java-sdk-sns</artifactId>
        <version>1.11.328</version>
    </dependency>
    <dependency>
        <groupId>com.amazonaws</groupId>
        <artifactId>aws-java-sdk-core</artifactId>
        <version>1.11.328</version>
    </dependency>
    <dependency>
        <groupId>com.amazonaws</groupId>
        <artifactId>aws-java-sdk</artifactId>
        <version>1.11.328</version>
    </dependency>
</dependencies>

我认为我添加的依赖项比我真正需要的要多,但由于我不知道问题出在哪里,我只是尝试添加任何有意义的东西。

所以问题是:

我错过了什么,是什么导致了NoClassDefFoundError

编辑 由于AmazonSNSClient 的构造函数已弃用,我将行更改为

    logger.log("Creating SNS client");
    AmazonSNS snsClient = AmazonSNSClientBuilder.defaultClient();

但我仍然遇到错误,找不到AmazonSNSClientBuilder

就好像它没有向 jar 文件添加 sns 依赖,这很奇怪,因为 lambda 依赖似乎工作正常

【问题讨论】:

    标签: java amazon-web-services aws-lambda aws-sdk amazon-sns


    【解决方案1】:

    在这里找到了解决方案: AWS Lambda NoClassDefFoundError

    必须用这个 pom 配置把它变成一个 uberjar

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>2.3</version>
                <configuration>
                    <createDependencyReducedPom>false</createDependencyReducedPom>
                </configuration>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-22
      • 1970-01-01
      • 2013-06-04
      • 2016-02-02
      • 2023-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多