Java .jar文件(使用蜡染依赖项)仅在特定文件夹中工作

Java .jar文件(使用蜡染依赖项)仅在特定文件夹中工作,java,intellij-idea,jar,dependencies,batik,Java,Intellij Idea,Jar,Dependencies,Batik,我一直在做一个小项目,我想把.jar放在repo()的根目录中。目前,我只能在.jar位于out/artifacts/文件夹中时让它运行(我链接的GitHub repo上没有显示该文件夹,因为那里当前没有任何内容)。当我把它放在那里时,周围必要的文件夹就不在那里了,除非我把它们移到那里,而且我真的不想在我的repo中复制这些文件。我不明白为什么会这样。当我通过main方法(位于src/main.java中)运行Intellij时,它工作得很好。我也不想担心我的.jar和.java文件没有引用具有

我一直在做一个小项目,我想把.jar放在repo()的根目录中。目前,我只能在.jar位于out/artifacts/文件夹中时让它运行(我链接的GitHub repo上没有显示该文件夹,因为那里当前没有任何内容)。当我把它放在那里时,周围必要的文件夹就不在那里了,除非我把它们移到那里,而且我真的不想在我的repo中复制这些文件。我不明白为什么会这样。当我通过main方法(位于src/main.java中)运行Intellij时,它工作得很好。我也不想担心我的.jar和.java文件没有引用具有相同路径的相同文件,因此将.jar放在根目录中对我来说非常重要


如果有人能向我解释一下我在依赖项和使.jar正常工作方面做错了什么,那就太好了。

jar工件配置不正确。您正在将其他依赖项jar直接打包到Java不支持的主jar中。其他jar要么需要在主jar中解包(提取),要么通过
Manifest.MF
文件链接到主jar。您的清单似乎指定了相对于主jar文件位置的正确类路径,因此,当您在该目录中运行它时,它可以工作,因为它能够从磁盘加载链接的jar。当您将主jar移动到其他目录,但不将链接的依赖项与其一起移动时,它将不会运行

请参阅,以了解其工作原理的解释以及可以进行实验的示例项目

另请参见以下答案,以了解潜在问题:


JAR工件配置不正确。您正在将其他依赖项jar直接打包到Java不支持的主jar中。其他jar要么需要在主jar中解包(提取),要么通过
Manifest.MF
文件链接到主jar。您的清单似乎指定了相对于主jar文件位置的正确类路径,因此,当您在该目录中运行它时,它可以工作,因为它能够从磁盘加载链接的jar。当您将主jar移动到其他目录,但不将链接的依赖项与其一起移动时,它将不会运行

请参阅,以了解其工作原理的解释以及可以进行实验的示例项目

另请参见以下答案,以了解潜在问题:


罐子里没有罐子。您需要使用maven创建一个“胖罐子”。我创建了一个标准的Java项目。如果将Maven用作胖罐子,这会是一个问题吗?或者这仅限于maven项目?JAR不包含JAR。您需要使用maven创建一个“胖罐子”。我创建了一个标准的Java项目。如果将Maven用作胖罐子,这会是一个问题吗?或者这仅限于maven项目?似乎有所帮助。感谢您帮助我更好地理解这一点。我以前从未尝试过使用依赖项在IDE之外运行任何东西。我现在得到的错误是不同的,因为.jar深入到程序中,但仍然存在从Intellij中的Main运行代码所不能给出的错误。(线程“main”java.lang.NoClassDefFoundError中的异常:org/apache/batik/dom/util/DocumentFactory位于MainMenu.liveUpdate(MainMenu.java:113))。这个异常似乎是指PNGTranscoder,它在.jar中提取了相应的依赖项。很可能一些依赖项不在最终的jar中。您可以考虑使用GADLE或Maven使用FATAR插件来构建JAR。这似乎有帮助。感谢您帮助我更好地理解这一点。我以前从未尝试过使用依赖项在IDE之外运行任何东西。我现在得到的错误是不同的,因为.jar深入到程序中,但仍然存在从Intellij中的Main运行代码所不能给出的错误。(线程“main”java.lang.NoClassDefFoundError中的异常:org/apache/batik/dom/util/DocumentFactory位于MainMenu.liveUpdate(MainMenu.java:113))。这个异常似乎是指PNGTranscoder,它在.jar中提取了相应的依赖项。很可能一些依赖项不在最终的jar中。您可以考虑使用GADLE或Maven使用FATAR插件来构建JAR。