IntelliJ - Maven 添加外部 jar 文件但 java.lang.NoClassDefFoundError

我正在使用 IntelliJ 版本 11.0.7 (2020.1.3) 创建了一个简单的 maven 项目并将我的 jar 添加到其中

文件 -> 项目结构 -> 新建项目库 -> Java -> 选择我的 jar -> 确定 -> 确定

在该 jar 文件中,存在运行应用程序所需的所有依赖项。

没有编译时错误,但是当我运行我的 Maven 项目时,它会抛出这个异常:

Exception in thread "main" java.lang.NoClassDefFoundError: com/fasterxml/jackson/core/JsonProcessingException

添加此 jar 后,它会引发有关下一个丢失 jar 的异常,同样,当我添加该 jar 中使用的所有依赖项时,一切正常。

当我添加到外部库时,有什么方法可以自动生成所有依赖项并从 jar 中添加到外部库中?

stack overflow IntelliJ - Maven adding external jar file but java.lang.NoClassDefFoundError
原文答案
author avatar

接受的答案

最后,我在生成 Jar 文件的 pom.xml 中添加了这个

要让 Maven 从您的项目构建 Fat JAR,您必须在项目的 POM 文件中包含 Fat JAR 构建配置。通过在 POM 文件的插件部分中包含 maven-assembly-plugin,您可以将 Maven 配置为从您的项目构建 Fat JAR。 Maven 将其构建的输出产品称为程序集。因此得名 maven-assembly-plugin。

<plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-assembly-plugin</artifactId>
        <version>3.3.0</version>
        <configuration>
            <descriptorRefs>
                <descriptorRef>jar-with-dependencies</descriptorRef>
            </descriptorRefs>
        </configuration>
        <executions>
            <execution>
                <id>make-assembly</id>
                <phase>package</phase>
                <goals>
                    <goal>single</goal>
                </goals>
            </execution>
        </executions>
    </plugin>

现在它按预期工作。

参考: http://tutorials.jenkov.com/maven/maven-build-fat-jar.html


答案:

作者头像

in that jar file, there are all the dependencies present which requires to run the application.

您确定所有依赖项都存在吗?你的下一条语句是 After adding this jar it is throwing exception about the next missing jar, likewise when I added all the dependencies which are used inside that jar then everything works fine.

您的 jar 文件是否托管在 maven 存储库中?如果是,只需在 maven pom.xml 文件中声明它,它将管理所有传递依赖项。如果它不在 Maven 存储库中,则需要运行 mvn install 命令将其安装到本地 Maven 存储库中,稍后在 pom.xml 文件中引用它。如果您正确打包包含正确 pom.xml 的 jar 文件,它也会自动解析您的传递依赖项。

相关问题