Maven 是否默认打包依赖?

Does Maven package dependencies by default?

我有一个具有特定依赖集的 Maven 项目。依赖项之一是:

<dependency>
    <groupId>net.java.dev.jna</groupId>
    <artifactId>jna</artifactId>
    <version>4.5.0</version>
</dependency>

只要我在 Eclipse 中工作,一切都很好。但是当我打包并尝试使用生成的 jar 文件时(如果重要的话,从命令行),我收到此错误消息:

Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/jna/NativeLibrary

而这个 class 绝对可以在 IDE 中访问。

我的猜测是默认情况下 Maven 没有打包项目的依赖项,但在那种情况下,为什么我没有收到更多错误消息抱怨更多 class 找不到?

Maven 只会为您的 project/component 创建一个 jar。这不包括外部 jar(依赖项)。如果你 want/need 在你的 jar 中包含依赖项的内容,你应该创建一个 fat jar 或 uber jar。对于超级罐子,您可以使用 shade plugin.