0

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

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

我的文件层次结构是:

  • 项目
    • 测试.java
    • aws-java-sdk-1.10.5.1.jar
    • aws-java-sdk-1.10.5.1
      • 文档
        • 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-flow-build-tools-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

我确信这是一个非常愚蠢的问题,主要是我无法记住如何正确使用它。如果有人能给我一个关于如何完成这项工作的白痴指南,我将非常感谢你!

4

2 回答 2

2

基本上,当您编译和运行时,jar 必须位于类路径中。

你已经知道了编译部分。对于运行部分,您可以执行类似的操作:

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

类加载器将(希望)在正确的位置查找并选择类。

旁注:如果您在不使用和 IDE 的情况下进行开发,那么您将在 Java 做一些不平凡的事情时遇到麻烦。导入和缺少自动完成功能会降低您的开发速度。建议给 IntelliJ 或 Eclipse 一个机会。

旁注 2:如果您要进行开发并手动将最终的工件放在一起,您还将在管理依赖项方面遇到困难。我建议研究类似 maven ( https://maven.apache.org )

于 2015-07-18T20:52:31.100 回答
0

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

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

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

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

于 2020-09-14T20:57:44.247 回答