【问题标题】:java.lang.NoClassDefFoundError: com/amazonaws/auth/AWSCredentialsjava.lang.NoClassDefFoundError: com/amazonaws/auth/AWSCredentials
【发布时间】:2020-11-19 15:45:16
【问题描述】:

我正在为 AWS 运行 Glacier API,只是一个非常基本的版本 - 试图列出我的保管库。

我按照http://docs.aws.amazon.com/amazonglacier/latest/dev/creating-vaults-sdk-java.html#creating-vaults-sdk-java-example 的示例进行操作。

我在 Linux 上从命令行运行。它编译得很好:

javac -cp sdk/lib/aws-java-sdk-1.7.3.jar -d bin src/AmazonGlacierVaultInfo.java

但是在运行时,我得到:

java -cp "bin: sdk/lib*" AmazonGlacierVaultInfo

Exception in thread "main" java.lang.NoClassDefFoundError: com/amazonaws/auth/AWSCredentials

似乎找不到 sdk jar 中的 SDK 类。

虽然我认为我的类路径是正确的:

./:/home/name/sites/git/glacier/bin/:/home/name/sites/git/glacier/sdk/:/home/name/sites/git/glacier/src/

我从 /home/name/sites/git/glacier 运行和编译,该目录有 bin、src 和 sdk 目录,详见 http://docs.aws.amazon.com/amazonglacier/latest/dev/using-aws-sdk-for-java.html#setting-up-and-testing-sdk-java-commandline

任何帮助将不胜感激。

【问题讨论】:

    标签: java amazon-web-services


    【解决方案1】:

    几个问题

    • 添加正斜杠以解析lib 目录的内容
    • 从类路径中删除空格
    • 周围的引号是不必要的

    命令:

    java -cp bin:sdk/lib/* AmazonGlacierVaultInfo
    

    【讨论】:

    • 谢谢,试过了,但结果相同:java -cp "bin: sdk/lib/*" AmazonGlacierVaultInfo.我得到 java.lang.NoClassDefFoundError: com/amazonaws/auth/AWSCredentials etc....
    • 我实际上并没有发现 - 非常感谢,就是这样。
    【解决方案2】:

    我有同样的错误,但我重试如下

    如果你也使用 maven,请添加插件:

    <build>
            <plugins>
                <plugin>
                    <artifactId>maven-assembly-plugin</artifactId>
                    <configuration>
                        <archive>
                            <manifest>
                                <mainClass>fully.qualified.MainClass</mainClass>
                            </manifest>
                        </archive>
                        <descriptorRefs>
                            <descriptorRef>jar-with-dependencies</descriptorRef>
                        </descriptorRefs>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    

    然后运行:

    mvn clean compile assembly:single
    

    它将所有需要的依赖打包到一个jar中然后错误就会消失。

    【讨论】:

      【解决方案3】:

      我遇到了同样的问题,它对我有用。

      在 pom.xml 中添加以下内容

          <plugin>
              <artifactId>maven-assembly-plugin</artifactId>
              <configuration>
                  <archive>
                      <manifest>
                          <mainClass>fully.qualified.MainClass</mainClass>
                      </manifest>
                  </archive>
                  <descriptorRefs>
                      <descriptorRef>jar-with-dependencies</descriptorRef>
                  </descriptorRefs>
              </configuration>
          </plugin>
      

      然后到目标文件夹查看jar文件的名称。它看起来像这样aws-java-sdk-1.7.3-SNAPSHOT-jar-with-dependencies.jar 然后从目标文件夹中出来并运行

      java -cp sdk/lib/name-of-jar-file-found-inside-target-folder -d bin src/AmazonGlacierVaultInfo
      

      name-of-jar-file-found-inside-target-folder 看起来像这样 aws-java-sdk-1.7.3-SNAPSHOT-jar-with-dependencies.jar

      【讨论】:

        猜你喜欢
        • 2019-11-25
        • 1970-01-01
        • 2021-02-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-01
        • 2013-12-16
        相关资源
        最近更新 更多