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

lag*_*k19 5 program-entry-point jar class intellij-idea

我有一个简单的例子

public class FileSystemReadFile {
    public static void main(String[] args) throws IOException {
        System.out.println("Reading the file" + args[0]);
    }
}
Run Code Online (Sandbox Code Playgroud)

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

  1. 添加了带有依赖项的工件(大概我有一些);
  2. 确保MANIFEST.MF位于src\main\resources\META-INF\该站点的此处所提到的位置。
  3. 运行Artifact构建,该构建使我的JAR文件进入out文件夹,然后运行该jar文件,提示我“找不到或加载主类”
    java <name>.jar

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

项目结构

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

在此处输入图片说明

我怀疑是有原因的。有任何想法吗?

use*_*094 5

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

这会导致 JAVA 安全异常。我已经在 Eclipse Paho 和 Bouncy Castle 上看到了这一点,它们已签名。

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

jarsigner -verify -verbose  <path to library JAR>
Run Code Online (Sandbox Code Playgroud)

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

了解如何在工件创建期间不提取 Paho 和 BCP

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

IntelliJ 应该警告你......


lag*_*k19 1

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

hadoop jar <Jar-name>
java -jar <Jar-name>
Run Code Online (Sandbox Code Playgroud)

一切正常。