首页 > 解决方案 > 如何解决错误:jarfile 无效或损坏

问题描述

我有一个用于 HelloWorld 的 Intellij Gradle 项目。该程序在 IDE 中运行,但运行 jar 文件时出现无效或损坏的 jar 错误。我对 build.gradle 和 Manifest 进行了一些更改,但仍然无法运行。我正在使用 Ubuntu 16.04。

我认为这个问题与清单有关。

IDE -

Intellij - 2019.2 Gradle 项目

Java - java version "1.8.0_191"
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)

build.gradle -

plugins {
    id 'java'
}

group 'com.HelloWorldTesting'
version '1.0-SNAPSHOT'

sourceCompatibility = 1.8

jar {
    from {
        configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
    }
    manifest {
        attributes(
                'Implementation-Title': 'Hello World',
                "Main-Class": "com.HelloWorldTesting.Hello"
        )
    }
    archivesBaseName = 'app'
}

repositories {
    mavenCentral()
}

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.12'
}

班级 -

public class Hello {
    public static void main(String[] args) {
        // Prints "Hello, World" to the terminal window.
        System.out.println("Hello, World");
    }
}

错误:无效或损坏的 jarfile HelloWorldArt.main.jar

树 -

.
├── 建造
│ ├── 类
│ │ └── java
│ │ └── 主要
│ │ └── Hello.class
│ └── tmp
│ └── compileJava
├── build.gradle
├── 毕业
│ └── 包装
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── 毕业
├── gradlew.bat
├── META-INF
│ └── MANIFEST.MF
├──出
│ └── 文物
│ ├── HelloWorldArt_jar
│ │ └── HelloWorldArt.jar
│ └── HelloWorldArt_main_jar
│ └── HelloWorldArt.main.jar
├── settings.gradle
├── 源
│ ├── 主要
│ │ ├── java
│ │ │ ├── Hello.java
│ │ │ └── META-INF
│ │ │ └── MANIFEST.MF
│ │ └── 资源
│ └── 测试
│ ├── java
│ └── 资源

标签: javagradleintellij-ideaintellij-13

解决方案


在您的清单中,您已将主类定义为com.HelloWorldTesting.Hello. 查看您的项目树,我可以看到 Hello.java 类位于您的源文件夹根目录中,并且不在包中com.HelloWorldTesting

尝试像这样设置你的主类: "Main-Class": "Hello"

此外,您的 src 文件夹中有一个清单文件,并且您正在使用 gradle 生成一个清单:

manifest {
    attributes(
            'Implementation-Title': 'Hello World',
            'Main-Class': 'Hello'
    )
}

拥有多个清单文件会导致这种意外行为。从源文件夹中删除清单,运行gradle clean,然后构建应该可以工作。


推荐阅读