【问题标题】:Main class not found, IntelliJ building a jar找不到主类,IntelliJ 构建一个 jar
【发布时间】:2012-06-25 08:50:36
【问题描述】:

当我尝试运行在 IntelliJ 中创建的 jar 文件时遇到问题。
我按照此处列出的步骤进行操作:How to build jars from IntelliJ properly? 并使用 IntelliJ 广泛搜索有相同问题的其他人,但没有找到解决方案。
在菜单 Project Structure>Artifacts 部分中,我有包和主类名称,我还尝试使用源文件和 .class 文件的相对和绝对路径指定“类路径”位(这似乎隐藏在IntelliJ 项目显示树..),但即使有这一切(我也确保每次更改某些内容时都重建 jar)我得到“找不到主类。程序将退出。”当我尝试运行 jar 时的消息。

在主项目文件夹中,有src和out。
out 包含带有包树和类文件的“生产”
out 还包含带有 jar 文件夹和 jar 可执行文件的“工件”
src 包含一个图像文件夹、META-INF 和包树。
包的第一个文件夹包含主类,所以 src/ravelDemo/RavelDemoMain.java

在Project Settings>Artifacts中,主类列为ravelDemo.RavelDemoMain
目前,类路径是 out\production\RavelSequence v1.03\ravelDemo\ 但是这个和我指定的所有其他类路径(或留空)似乎没有指向正确的位置。 (RavelSequence v1.03 是项目的名称)。

我做错了什么?

【问题讨论】:

  • 查看这些截屏视频:screenr.com/Eyg8screenr.com/FWM8。如果您可以通过类似步骤重现问题,请将示例项目附加到问题中。
  • 感谢您的回复!这是一个非常方便的网站。这就是我所拥有的:screenr.com/EMl8
  • 这是一个从头开始构建的示例项目,具有相同的问题,以您的示例为模型:screenr.com/6Ml8
  • 你能压缩并分享项目吗?你的系统默认JDK是什么?您可以尝试使用与项目 JDK 相同目录中的 java.exe 从命令行运行它吗? java.exe -jar Sample.jar
  • 我有 jdk 1.7.0_03。我可以使用这些命令从命令行运行它们。我收到一堆关于 fileIO 和 imageIO 的错误,但也许我没有正确地将它们包含在 jar 中。这是项目:dl.dropbox.com/u/4843072/RavelSequence%20v1.03.zip 我想要一个“双击”可执行文件而不是命令行可执行文件,这样我就可以轻松地共享该项目。这可能吗?

标签: java intellij-idea executable-jar classnotfound


【解决方案1】:

根据上面的讨论,似乎 IntelliJ IDEA 正在使用 Manifest 中正确指定的主类构建有效的可执行 jar,当使用项目的命令行使用 java -jar ... 命令执行时,此 jar 工作正常用户机器上的目标 JDK 版本。

问题是它在 @sideways8 系统上双击时不起作用。这可能是由于默认 Java 安装损坏或 Windows 注册表中的 .jar 文件类型关联错误造成的。这是特定于机器的问题,因为双击它在我的系统上运行共享项目 jar 没有问题

要解决此问题,您可以尝试从Control Panel | 卸载此计算机上存在的所有 Java 版本。 Programs and Features,然后从头开始安装新的 JDK,使其成为系统上唯一的 JDK,.jar 文件类型由它处理。

我使用Total Commander,它有一个很好的功能来检查/编辑文件关联(File | Associate With...),这是当我按下Edit type....jar关联的显示方式:

【讨论】:

  • 好的,我正在下载一个新的jdk。如果我尝试与其他人分享这个罐子,根据您的经验,他们是否可能遇到同样的问题?有没有办法用jar打包合适的jdk,这样就不用担心系统的原生环境了?
  • 这是非常罕见的问题,大多数安装了 Java 的用户都可以运行您的应用程序。请注意,您可能希望以 JDK 1.6 版本为目标,因为它可能仍然是许多机器上的默认版本。如果您使用 JDK 1.7 构建,安装了 JDK 1.6 的用户将无法运行您的应用程序。您可以通过将目标 JDK 更改为 1.6 或在 Settings | 中添加 -source 1.6 -target 1.6 选项来修复它。 Compiler | Java Compiler附加命令行参数.
  • 如果您想 100% 确定您的应用程序在目标机器上运行,请将 JRE 与它捆绑在一起或将其包装到安装程序中,以验证该机器是否具有所需的最低版本的工作 JDK/JRE运行您的应用程序并在系统不满足您的要求时自动下载/安装它。
  • 好的,我现在可以使用 jdk1.7 了。仍在下载 1.6 版本,以便我可以覆盖这些基础。谢谢!
  • 重建项目和工件。
【解决方案2】:

我遇到了同样的问题。 jar 文件是使用 IntelliJ IDEA 或其他 IDE 创建的。我发现问题在于我的计算机上安装了两个版本的 java(java 6 和 java 8)。 这是系统配置错误的问题。所以删除你拥有的任何版本的java并重新安装它,问题就解决了。

【讨论】:

    猜你喜欢
    • 2017-03-30
    • 2017-12-14
    • 2017-11-06
    • 2014-12-14
    • 2017-12-04
    • 2018-06-12
    • 2020-11-02
    • 2016-09-29
    相关资源
    最近更新 更多