"main"线程中的异常:java.lang.NoClassDefFoundError:com/amazonaws/endpointdiscovery/EndpointDiscoveryProviderChain

5

我正在开发一个工具,用于从dynamoDB中提取数据并按照这个教程中的步骤进行操作。
因此,我的代码如下:

package dynamodbtocsvfile;

import java.util.Map;

import com.amazonaws.services.dynamodbv2.AmazonDynamoDB;
import com.amazonaws.services.dynamodbv2.model.AttributeValue;
import com.amazonaws.services.dynamodbv2.model.ScanRequest;
import com.amazonaws.services.dynamodbv2.model.ScanResult;
import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClientBuilder;

public class dynamoDbScan {

    public dynamoDbScan() {}

    public static void main(String[] args) {
        AmazonDynamoDB client = AmazonDynamoDBClientBuilder.standard().build();

        ScanRequest scanRequest = new ScanRequest()
            .withTableName("Reply");

        ScanResult result = client.scan(scanRequest);
        for (Map<String, AttributeValue> item : result.getItems()){
            System.out.println(item);
        }
    }

}

这是我的pom.xml依赖项:

<dependencies>

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-csv</artifactId>
    <version>1.1</version>
</dependency>
<dependency>
    <groupId>com.amazonaws</groupId>
    <artifactId>aws-java-sdk-core</artifactId>
    <version>1.11.24</version>
</dependency>
<dependency>
    <groupId>com.amazonaws</groupId>
    <artifactId>aws-java-sdk-dynamodb</artifactId>
    <version>1.11.456</version>
</dependency>

文件编译无误,但运行时出现以下错误:
    Exception in thread "main" java.lang.NoClassDefFoundError: com/amazonaws/endpointdiscovery/EndpointDiscoveryProviderChain
    at dynamodbtocsv4j.dynamoDbScan.main(dynamoDbScan.java:16)
Caused by: java.lang.ClassNotFoundException: com.amazonaws.endpointdiscovery.EndpointDiscoveryProviderChain
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 1 more

以下是我的.classpath文件的内容:

 <?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="src" output="target/classes" path="main/java">
        <attributes>
            <attribute name="optional" value="true"/>
            <attribute name="maven.pomderived" value="true"/>
        </attributes>
    </classpathentry>
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
        <attributes>
            <attribute name="maven.pomderived" value="true"/>
        </attributes>
    </classpathentry>
    <classpathentry kind="src" output="target/test-classes" path="src/test/java">
        <attributes>
            <attribute name="optional" value="true"/>
            <attribute name="maven.pomderived" value="true"/>
        </attributes>
    </classpathentry>
    <classpathentry kind="lib" path="C:/Users/USERNAME/.m2/repository/com/amazonaws/aws-java-sdk-dynamodb/1.11.456/aws-java-sdk-dynamodb-1.11.456.jar" sourcepath="C:/Users/USERNAME/.m2/repository/com/amazonaws/aws-java-sdk-dynamodb/1.11.456/aws-java-sdk-dynamodb-1.11.456-sources.jar">
        <attributes>
            <attribute name="javadoc_location" value="jar:file:/C:/Users/USERNAME/.m2/repository/com/amazonaws/aws-java-sdk-dynamodb/1.11.456/aws-java-sdk-dynamodb-1.11.456-javadoc.jar!/"/>
            <attribute name="maven.pomderived" value="true"/>
            <attribute name="org.eclipse.jst.component.nondependency" value=""/>
            <attribute name="maven.groupId" value="com.amazonaws"/>
            <attribute name="maven.artifactId" value="aws-java-sdk-dynamodb"/>
            <attribute name="maven.version" value="1.11.456"/>
            <attribute name="maven.scope" value="compile"/>
        </attributes>
    </classpathentry>
    <classpathentry kind="lib" path="C:/Users/USERNAME/.m2/repository/com/amazonaws/aws-java-sdk-core/1.11.24/aws-java-sdk-core-1.11.24.jar" sourcepath="C:/Users/USERNAME/.m2/repository/com/amazonaws/aws-java-sdk-core/1.11.24/aws-java-sdk-core-1.11.24-sources.jar">
        <attributes>
            <attribute name="javadoc_location" value="jar:file:/C:/Users/USERNAME/.m2/repository/com/amazonaws/aws-java-sdk-core/1.11.24/aws-java-sdk-core-1.11.24-javadoc.jar!/"/>
            <attribute name="maven.pomderived" value="true"/>
            <attribute name="maven.groupId" value="com.amazonaws"/>
            <attribute name="maven.artifactId" value="aws-java-sdk-core"/>
            <attribute name="maven.version" value="1.11.24"/>
            <attribute name="maven.scope" value="compile"/>
        </attributes>
    </classpathentry>
    <classpathentry kind="lib" path="C:/Users/USERNAME/.m2/repository/org/apache/commons/commons-csv/1.1/commons-csv-1.1.jar"/>
    <classpathentry kind="lib" path="C:/Users/USERNAME/.m2/repository/com/amazonaws/jmespath-java/1.11.66/jmespath-java-1.11.66.jar"/>
    <classpathentry kind="output" path="target/classes"/>
</classpath>

任何帮助都将不胜感激!

你是如何运行它的(从你的IDE、从Maven插件还是从CLI)?如果是后者,你是否在类路径上包含了所有的依赖项? - Chris
通常情况下,您可能希望在 AWS 依赖项的版本号上保持一致。 除此之外,正如 @Chris 刚才提到的:您是如何调用它的?您在使用集成开发环境(IDE)吗?如果是这样,它是否意识到了 Maven? - sofend
在Spring Tool Suite中运行它 - Andrei
1个回答

7

您尝试过在同一个版本中使用所有SDK依赖项,例如1.11.457吗?

<dependency>
    <groupId>com.amazonaws</groupId>
    <artifactId>aws-java-sdk-core</artifactId>
    <version>1.11.457</version>
</dependency>
<dependency>
    <groupId>com.amazonaws</groupId>
    <artifactId>aws-java-sdk-dynamodb</artifactId>
    <version>1.11.457</version>
</dependency>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接