【问题标题】:cannot find or load main class when run a jar运行 jar 时找不到或加载主类
【发布时间】:2019-02-21 10:45:10
【问题描述】:

首先,我知道这个问题经常被问到。但我的问题不一样,请耐心看完整描述。

我已经使用 intellij IDEA 2018.2 来构建 jar。我曾经用 2017 年制作过 jar,效果很好。最近,我使用intellij构建了带有artifact的jar。

而且设置似乎很好。它以前对我有用。但是我运行了构建的jar,提示“主类无法运行或加载”。

jar 文件看起来正常。但我发现 META-INF 是不同的。我有一些文件很奇怪:

我发现我是否删除了除 MANIFEST.MF 之外的这些文件。它可以正常工作。我不确定设置有什么不同。

我尝试了以下方法:

  1. 尝试删除.idea文件夹,打开项目。

  2. 尝试删除工件并配置一个新工件。

  3. 尝试修改模块的输出路径。

  4. 重建项目或重建工件 jar。

但是所有的方法都行不通。我曾尝试在 intellij 的 MAC OS 和 windows OS 中使用相同的设置构建 jar,但结果似乎是相同的。谁能给我一些建议。提前谢谢你。

【问题讨论】:

    标签: java intellij-idea


    【解决方案1】:

    *,RSA, *.SF, *.DSA 是 jarfile 签名时创建的文件。显然,您使用的 jar 已签名,因此如果您提取内容并将其放入新的 jar 中,则签名无效并且 Java 不会接受它们。因此,您应该删除签名,或者退出您的工件生成的整个 jar。

    【讨论】:

    • 感谢您的回答。反正有没有通过 intellij 中的 arifact 设置辞职整个罐子?我想知道 Intellij 的版本是否有什么作用。我记得 intellij 2017 不会放弃构建的 jar。
    • 由于 IntelliJ 的重新签名操作,这些文件不存在。如果您打开库 jar,您会看到库本身已签名。 IntelliJ 只是解压缩它们并将内容添加到您的最终工件中。要为 jar 签名,您需要代码签名证书和来自 Ant 的后处理任务,例如使用 signjar 元素。如果您不想签名,则可能需要取消对库的签名。您可以提取它,删除 *,RSA, *.SF, *.DSA 文件并使用您最喜欢的 zip 工具重新打包。
    • 这没有意义。作为具有相同依赖项的同一个项目。我尝试使用intellij 2018 终极版和intellij 2017 社区版构建jar。发现社区版建的jar没问题。没有任何*.RSA,*,SF,*.DSA 文件。
    【解决方案2】:

    我发现了解决这个问题的方法。我不应该将依赖项作为文件夹导入。我必须通过选择所有 jar 文件而不是 jar 文件的文件夹来导入它们。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-18
      • 2016-02-16
      • 2020-09-24
      • 2021-06-06
      • 1970-01-01
      • 2017-07-30
      • 2013-03-23
      • 2014-09-04
      相关资源
      最近更新 更多