Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在IntelliJ IDEA中将外部库添加到工件jar_Java_Maven_Intellij Idea_Build_Dependencies - Fatal编程技术网

Java 在IntelliJ IDEA中将外部库添加到工件jar

Java 在IntelliJ IDEA中将外部库添加到工件jar,java,maven,intellij-idea,build,dependencies,Java,Maven,Intellij Idea,Build,Dependencies,如何将外部库添加到IntelliJ IDEA中的项目中,以便在构建工件时,它仍然可以访问库中的类 我从项目结构中创建了一个新的Jar工件,然后将外部Jar添加到库中,然后在模块列表中检查它,最后将它添加到工件的输出中。这些都不管用。当我构建并尝试运行我的应用程序时,它会抛出一个错误: 线程“main”java.lang.NoClassDefFoundError中出现异常: 我遗漏了什么,或者我这样做完全错了吗?如果您使用maven构建应用程序,那么这不是添加外部库的正确方法。你也应该 执行如下所

如何将外部库添加到IntelliJ IDEA中的项目中,以便在构建工件时,它仍然可以访问库中的类

我从项目结构中创建了一个新的Jar工件,然后将外部Jar添加到库中,然后在模块列表中检查它,最后将它添加到工件的输出中。这些都不管用。当我构建并尝试运行我的应用程序时,它会抛出一个错误:

线程“main”java.lang.NoClassDefFoundError中出现异常:


我遗漏了什么,或者我这样做完全错了吗?

如果您使用maven构建应用程序,那么这不是添加外部库的正确方法。你也应该

  • 执行如下所示的库安装
    mvn安装:安装文件-Dfile=myJar.jar-DgroupId=com.yourproject-DartifactId=yourproject-Dversion={version}-dpacking=jar
  • 如前所述,使用系统路径

  • 首选选项1,因为您不必在项目中保留jar。

    这里有两个选项:

    • 将依赖项提取到工件jar中,使应用程序成为包含所有依赖项的单个可执行jar
    • 通过
      Manifest.MF
      链接依赖jar,并将其复制到应用程序主jar附近
    我准备了一个示例项目,演示了这两种方法:

    工件被生成到
    out\single
    out\linked
    目录中

    相关配置:


    我实际上不知道Maven是否被使用。我还没有创建任何构建文件。不确定IDEA是如何实现的,但我的假设是不需要构建文件。这里只有一个MANIFEST.MF文件。你刚刚帮我解决了一个问题,我花了25个多小时,也许2个星期,试图破解这个问题。非常感谢你!而且,这一切都是可行的,但背后的支柱是什么呢?IntelliJ是否使用Maven或Ant之类的工具?您可以使用基于Maven的项目,是的,但这与您所处的环境无关。当您向项目添加新的依赖项时,它们不会自动添加到您已有的工件中,您需要再次检查工件配置,并添加从jar运行应用程序所需的所有缺少的库。另一个常见的错误是将一个jar包含在另一个jar中,而这将无法工作,jar必须在主jar中解包,或者在主jar附近复制并通过清单链接(在这种情况下,不要忘记向清单添加任何新jar)。在基于Maven的项目中,可以使用Maven插件来创建具有依赖项的JAR,您将通过运行Maven目标而不是使用IntelliJ IDEA工件配置来生成最终工件。这样,您添加到
    pom.xml
    的所有新依赖项将自动出现在Maven生成的jar中。基于Gradle的项目也是如此。像图像这样的资源应该放在哪里?资源通常放在
    resources
    目录中(配置为resources root的目录)。在示例项目中,它与您看到的
    log4j.properties
    文件所在的目录相同。如果需要,您可以添加更多资源根,并且这些目录中的文件将显示在编译器输出中,因此您不必调整工件配置。