IntelliJ 构建错误的 JAR:找不到或加载主类

Posted

技术标签:

【中文标题】IntelliJ 构建错误的 JAR:找不到或加载主类【英文标题】:IntelliJ build wrong JAR: Could not find or load main class 【发布时间】:2017-03-30 22:13:57 【问题描述】:

我有一个简单的例子

public class FileSystemReadFile 
    public static void main(String[] args) throws IOException 
        System.out.println("Reading the file" + args[0]);
    

这是在 IntelliJ 中创建的,我想在其中构建 JAR 文件;所以我做了什么:

    添加了带有依赖项的工件(大概我有一些); 确保MANIFEST.MF 位于src\main\resources\META-INF\,因为它已经在网站的某处提及。 运行 Artifact build,它在 out 文件夹中给了我 JAR 文件,我运行那个 jar 文件说我“找不到或加载主类”java <name>.jar

您可能会看到主类已添加到 MANIFEST 中,并且清单的位置也很好。

当我打开创建的 JAR 文件时,我看到了相同的 MANIFEST 内容,我看到了很多依赖模块,但是我没有看到我的类!

我怀疑这是一个原因。有什么想法吗?

【问题讨论】:

你的班级是你截图中倒数第五个文件。 【参考方案1】:

如果您在应用中包含任何签名的 JAR,然后使用 IntelliJ 构建工件,它将提取 JARS 并将它们与您的编译输出捆绑在一起。

这会导致 JAVA 安全异常。我已经在 Eclipse Paho 和 Bouncy Castle 中看到了这一点。

您可以检查您正在使用的任何库 JAR 是否使用 jarsigner 工具进行了签名。

jarsigner -verify -verbose  <path to library JAR>

更改您的 IntelliJ 工件设置,以便将它们捆绑为库而不是被提取。如您所料,提取会使证书失效。

尝试仅使用 Main 创建一个虚拟项目。一次添加 1 个库 JAR(您正在尝试构建)。每次构建一个输出 JAR 直到 Main 中断。我就是这样找到的。

IntelliJ 应该警告你.....

【讨论】:

【参考方案2】:

不确定 IntellJ 发生了什么,但我再次重建了工件,一切正常。

hadoop jar <Jar-name>
java -jar <Jar-name>

一切正常。

【讨论】:

感谢发布解决方案 我收到错误“没有主要清单属性,在 jarname.jar”我找到了解决方案 ***.com/questions/20952713/…

以上是关于IntelliJ 构建错误的 JAR:找不到或加载主类的主要内容,如果未能解决你的问题,请参考以下文章

每当在 Intellij IDEA 中运行 java 文件时,它都会显示错误“找不到或加载主类”[关闭]

idea打包jar,运行错误: 找不到或无法加载主类

Error 错误: 找不到或无法加载主类

Spring Boot gradle“找不到或加载主类”

Eclipse 无法编译,提示“错误: 找不到或无法加载主类”

Eclipse 无法编译,提示“错误: 找不到或无法加载主类”