代码之家  ›  专栏  ›  技术社区  ›  laggerok19

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

  •  5
  • laggerok19  · 技术社区  · 8 年前

    我有一个简单的例子

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

    1. 添加了带有依赖项的工件(大概我有一些);
    2. MANIFEST.MF 位于 src\main\resources\META-INF\ 正如已经在网站上提到的。
    3. 运行ArtifactBuild,它在out文件夹中为我提供了一个JAR文件,我运行那个JAR文件时说我“找不到或加载主类”
      java <name>.jar

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

    Project structure

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

    enter image description here

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

    2 回复  |  直到 8 年前
        1
  •  5
  •   user1325094    8 年前

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

    这将导致JAVA安全异常。我在《日食泛美卫生组织》和《弹跳城堡》中看到了这一点,它们都是签名的。

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

    jarsigner -verify -verbose  <path to library JAR>
    

    更改IntelliJ工件设置,以便将其绑定为库,而不是提取。正如您所期望的,提取会使证书失效。

    See how Paho and BCP are not extracted during artifact creation

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

    IntelliJ应该警告你。。。。。

        2
  •  1
  •   laggerok19    8 年前

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

    一切正常。