【问题标题】:IntelliJ - Maven adding external jar file but java.lang.NoClassDefFoundErrorIntelliJ - Maven 添加外部 jar 文件但 java.lang.NoClassDefFoundError
【发布时间】:2021-01-15 18:00:15
【问题描述】:

我正在使用 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 中添加到外部库中?

【问题讨论】:

  • stackoverflow.com/a/574650/6629 基本上你要么需要创建一个'all in one' jar,所有依赖项都添加到可执行jar中,要么你需要为所有jar提供类路径。
  • 您还需要在 maven 中定义依赖项(库),而不是在 IntelliJ 中。

标签: java maven intellij-idea


【解决方案1】:

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 文件,它也会自动解析您的传递依赖项。

【讨论】:

  • 是的,所有的依赖都已经存在于jar文件内的pom.xml中。不,它不托管在 Maven 仓库中。我也运行了mvn install 命令,但它没有安装传递依赖项。
  • 这意味着你的安装命令没有正常运行,你可以参考这个答案以获得更多线索stackoverflow.com/a/36559812/1542363
【解决方案2】:

最后,我在生成 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

【讨论】:

    猜你喜欢
    • 2021-10-24
    • 1970-01-01
    • 2011-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-17
    • 1970-01-01
    • 2017-07-01
    相关资源
    最近更新 更多