Intellij Maven:创建包含所有库依赖项的jar

使用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插件 – 管理依赖关系和https://www.jetbrains.com/idea/help/maven.html ! 添加依赖项

  1. 打开pom.xml
  2. 菜单“代码”>“生成”>“依赖”(或快捷键ALT + INSERT)

您需要使用Maven Assembly Plugin来包含依赖项:

    maven-assembly-plugin    your.package.MainClass    jar-with-dependencies      

然后: mvn clean compile assembly:single

我建议你使用插件shade 。 它比Assembly更好,因为如果发生冲突,可以重新定位类 。

典型设置可能如下所示:(从官方文档中复制)

  ...    org.apache.maven.plugins maven-shade-plugin 2.4.2   package  shade     classworlds:classworlds junit:junit jmock:* *:xml-apis org.apache.maven:lib:tests log4j:log4j:jar:         ...  

如果大小很重要,您可以尝试使用true来减小大小。