【发布时间】:2015-12-03 16:01:23
【问题描述】:
使用 IntelliJ Idea,我想实现以下内容:
我想将一个应用程序导出到一个 jar 中,其中包含所有需要的库。例如。我需要用于 S3 访问的 AWS Java SDK 库,但如果我将 jar 上传到服务器并运行 jar,我会收到 NoClassDefFoundError,见下文:
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:2625)
at java.lang.Class.getMethod0(Class.java:2866)
at java.lang.Class.getMethod(Class.java:1676)
at sun.launcher.LauncherHelper.getMainMethod(LauncherHelper.java:494)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:486)
Caused by: java.lang.ClassNotFoundException: com.amazonaws.auth.AWSCredentials
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
... 6 more
比较:我在 Eclipse 中创建了相同的项目并且没有出错! jar 文件大小非常不同(Eclipse:~35 MB 与 IntelliJ Idea:~5.5 MB)!
我通过 Maven 包含了这些库,并将它们也下载到了我项目的“lib”文件夹中:
解决方案:
感谢您的所有提示,我现在可以使用它了!诀窍是我没有将依赖项添加到 pom.xml 文件中(因为我认为在项目结构中设置它们后会自动完成,但没有)!!!另请参阅我的另一个问题:Intellij IDEA Maven Plugin - Manage Dependencies 和 https://www.jetbrains.com/idea/help/maven.html!通过
添加依赖项- 打开 pom.xml
- 菜单“代码”>“生成”>“依赖项”(或快捷键 ALT + INSERT)
【问题讨论】:
-
你能显示你的 pom.xml 文件吗?您似乎没有声明依赖关系。
-
我通过 UI 设置依赖关系,见上面的截图。我添加了我的 pom.xml 的屏幕截图...
-
实际上依赖项没有包含在您的项目中。请注意,您的 pom.xml 文件中缺少
<dependencies/>块。您必须手动包含它们。 -
这里我必须同意@bigdestroyer,你需要将你的依赖项放在pom.xml中。否则 Maven 将不知道它们的任何信息,它们也不会被包含在内。
标签: java intellij-idea maven-plugin