将AWS与Java链接 - 极端基础

时间:2015-07-18 20:24:13

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

我很久没有使用过Java了,但我正在尝试编写一个使用AWS API的简单Java应用程序。

我坚持的部分是我不能完全记住如何将API链接到Java代码。我没有使用eclipse而且我不想,我喜欢用崇高的文本编写代码。所以我真的需要有人向我解释如何用简单的术语将它们连接在一起。

我的文件层次结构是:

  • 项目
    • Test.java
    • AWS-java的SDK-1.10.5.1.jar
    • AWS-java的SDK-1.10.5.1
      • 文档
      • LIB
        • AWS-java的SDK-1.10.5.1-javadoc.jar
        • AWS-java的SDK-1.10.5.1-sources.jar
        • AWS-java的SDK-1.10.5.1.jar
        • AWS-java的SDK-流构建工具-1.10.5.1.jar
      • 样品
      • 第三方

我将 aws-java-sdk-1.10.5.1.jar 移出lib文件夹并将其放在我的源代码的同一级别,因为这是我认为我需要做的。有关源代码,以下是我的示例:

import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.services.sns.AmazonSNSClient;

public class Test
{
  public static void main(String args[])
  {
    BasicAWSCredentials cruds = new BasicAWSCredentials("<<ACCESS KEY>>", "<<SECRET KEY>>");
    AmazonSNSClient snsClient = new AmazonSNSClient(cruds);

    System.out.println("Hello World!");
  }
}

在我的终端中,我使用命令编译我的代码:

javac Test.java

然而,这对我不起作用,我得到错误:找不到符号错误。我设法使用以下命令进行编译。 (但是,如果我的层次结构正确,我觉得top命令应该有效吗?):

javac -cp aws-java-sdk-1.10.5.1.jar Test.java  

在编译代码并获取我的类文件后,我尝试使用命令

运行我的程序
java Test

但是这会引发我的堆栈跟踪

Exception in thread "main" java.lang.NoClassDefFoundError: com/amazonaws/auth/AWSCredentials
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2688)
at java.lang.Class.getMethod0(Class.java:2937)
at java.lang.Class.getMethod(Class.java:1771)
at sun.launcher.LauncherHelper.validateMainClass(LauncherHelper.java:544)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:526)
Caused by: java.lang.ClassNotFoundException: com.amazonaws.auth.AWSCredentials
at java.net.URLClassLoader$1.run(URLClassLoader.java:372)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 6 more

我确信这是一个非常愚蠢的问题,而且主要是我无法记住如何正确使用它。如果有人可以给我一个如何做这项工作的白痴指南,我会非常感谢你!

2 个答案:

答案 0 :(得分:2)

基本上,当你正在编译并且你正在运行时,jar必须在类路径中。

你已经想到了编译部分。对于运行部分,你可以做类似的事情:

java -cp aws-java-sdk-1.10.5.1.jar:. Test

类加载器(希望)会在正确的位置查找并获取类。

侧面评论:如果您在不使用IDE的情况下进行开发,那么您将在Java上做一些不重要的事情。导入和缺少自动完成功能会降低您的开发速度。建议给IntelliJ或Eclipse一个机会。

旁边评论2 :如果您要进行开发并手工整理最终的工件,那么您也将很难管理依赖项。我建议调查像maven(https://maven.apache.org

这样的东西

答案 1 :(得分:0)

使用Maven并设置POM依赖项。例如,如果您使用Java IDE(例如IntelliJ),请执行以下任务:

  1. 在IntelliJ IDE中,选择“文件”,“新建”,“项目”。
  2. 在“新建项目”对话框中,选择“ Maven”。
  3. 选择下一步。
  4. 在GroupId中,输入aws-project。
  5. 在ArtifactId中,输入aws-project。
  6. 选择下一步。
  7. 选择完成。

注意:将在特定于服务的文件夹中找到的POM文件添加到项目中的POM文件中。然后创建一个在示例中找到的包,然后就可以开始将Java类添加到项目中了。

这比尝试查找JAR文件并将其包含在类路径中要容易得多。