class - IntelliJ 构建错误的 JAR : Could not find or load main class

标签 class intellij-idea jar main

我有一个简单的例子

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 中,并且 list 的位置也很好。

    Project structure

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

    enter image description here

    我怀疑这是一个原因。有任何想法吗?

    最佳答案

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

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

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

    jarsigner -verify -verbose  <path to library JAR>
    

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

    See how Paho and BCP are not extracted during artifact creation

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

    IntelliJ 应该警告你.....

    关于class - IntelliJ 构建错误的 JAR : Could not find or load main class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40636790/

    相关文章:

    java - 我无法打印包含对象和我的类的数组网格?带 Java 的 Netbeans

    java - 如何在 IntelliJ IDEA 的问题 View 中显示 javac 警告?

    intellij-idea - 新的Gradle版本与依赖项产生冲突

    java - 尝试使用 Eclipse 导出到 jar 时出错

    path - Clojure:如何获取正在运行的JAR/根源目录的路径?

    c# - 与类字段同名的参数会导致问题吗? C#

    java - 如何知道 Java 应用程序使用的所有类/jar 文件

    android-studio - 如何将按键序列映射到 IdeaVim 按键映射

    java - 包 org.jboss.netty.channel.socket.nio 不存在

    python - 使用 tkinter 和类创建多个不同颜色的形状