由IntelliJ IDEA创建的JAR文件无法运行。

5
我写了一个在IntelliJ中跨越几个类的程序,并且当我在IDE中测试它时,它运行良好。然而,每当我按照教程将我的项目制作成.jar可执行文件时,它无法运行。
点击out文件夹中的文件时,它会弹出窗口并显示“无法启动Java JAR文件'projectName.jar'”。
当我从终端打开它时,我收到错误信息“找不到或无法加载主类”。我使用了“$ java -jar projectName.jar”。
我按照以下步骤操作:
  1. 打开Project Structure,Artifacts并点击(+)。
  2. 在JAR下,从依赖项的模块中选择。
  3. 指向具有我的main方法的类,然后点击 OK。
  4. 单击应用并单击OK以退出。
  5. 然后我关闭项目结构并打开Build,然后是Build Artifacts...
  6. 接着我点击Build。
  7. 导航到~/IdeaProjects/projectName/out/artifacts/projectName_jar/projectName.jar
然后我尝试运行它,但它无法运行。我的项目既有GUI界面,也可以从命令行运行。当我在终端中编译主方法时,它正常工作,但是我需要一个JAR文件。我不确定在构建JAR之前应该包含什么问题,因为我确定我的代码与此无关。我还使用了Maven,不确定是否相关。在构建JAR之前,我应该做或添加哪些其他事情?
2个回答

8

这可能是因为清单文档(Manifest)创建在错误的位置。

首先,请确保它位于 src/main/resources/META-INF/MANIFEST.MF 文件夹中。

(Intellij 有时会错误地将其放置在 /src/main/java/META-INF/MANIFEST.MF 文件夹中。)

然后,请确保 jar 包在 src 文件夹中查找 META-INF,而不是 /java 或 /resources。这意味着:

当您设置 文件>项目结构>工件>+>JAR>从具有依赖关系的模块... 时,META-INF/MANIFEST.MF 目录 应该以 src 结尾。例如:

ONLY C:\Users\User\StudioProjects\Project\src\
NOT THE PREPOPULATED C:\Users\User\StudioProjects\Project\src\main\java

如果您的 Project Structure 已经设置好,请将 Manifest File 路径更改为:

C:\Users\User\StudioProjects\Project\src\META-INF\MANIFEST.MF
INSTEAD OF C:\Users\User\StudioProjects\Project\src\main\java\META-INF\MANIFEST.MF

1
你需要确保设置了Main-Class属性。一种检查方法是使用Zip实用程序打开Jar并查找META-MF/MANIFEST.MF提取或打开该文件,使用记事本、Notepad++或任何文档阅读器。如果“Main-Class”不在其中或设置为正确的主类,则会收到您收到的错误。通过查看IntelliJ教程,在设置工件发布时有一个Main-Class字段。下面是到IntelliJ页面的链接:IntelliJ创建工件教程

MANIFEST.MF文件是由IntelliJ创建的,因此我认为它是正确的。Main-Class是正确的,但只有两行,一行是“Manifest-Version: 1.0”,另一行是“Main-Class: projectName”。那里应该还有其他东西吗? - Eric Chan
潜在的问题。Main-Class属性必须是完全限定域名。例如,如果您的类在某个包或一些包中... com.packagename.ClassName。请参阅Package Fundamentals第7.5节: 使用包成员: 合格的名称。所以,如果您没有包,该属性就是要运行其主方法的类的名称。以下是来自Oracle网站的最佳描述Setting an Application's Entry Point - Mr00Anderson
@EricChan 我忘记在评论中标记你了。我是新来的Stack用户。 - Mr00Anderson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接