我很久没有使用过Java了,但我正在尝试编写一个使用AWS API的简单Java应用程序。
我坚持的部分是我不能完全记住如何将API链接到Java代码。我没有使用eclipse而且我不想,我喜欢用崇高的文本编写代码。所以我真的需要有人向我解释如何用简单的术语将它们连接在一起。
我的文件层次结构是:
我将 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
我确信这是一个非常愚蠢的问题,而且主要是我无法记住如何正确使用它。如果有人可以给我一个如何做这项工作的白痴指南,我会非常感谢你!
答案 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),请执行以下任务:
注意:将在特定于服务的文件夹中找到的POM文件添加到项目中的POM文件中。然后创建一个在示例中找到的包,然后就可以开始将Java类添加到项目中了。
这比尝试查找JAR文件并将其包含在类路径中要容易得多。