有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何解决错误:JAR文件无效或损坏

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

我认为这个问题与舱单有关

IDE-

Intellij-2019.2 格拉德尔项目

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)

建造。格拉德尔-

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");
    }
}

Error: Invalid or corrupt jarfile HelloWorldArt.main.jar

树-

.
├── build
│   ├── classes
│   │   └── java
│   │       └── main
│   │           └── Hello.class
│   └── tmp
│       └── compileJava
├── build.gradle
├── gradle
│   └── wrapper
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── META-INF
│   └── MANIFEST.MF
├── out
│   └── artifacts
│       ├── HelloWorldArt_jar
│       │   └── HelloWorldArt.jar
│       └── HelloWorldArt_main_jar
│           └── HelloWorldArt.main.jar
├── settings.gradle
├── src
│   ├── main
│   │   ├── java
│   │   │   ├── Hello.java
│   │   │   └── META-INF
│   │   │       └── MANIFEST.MF
│   │   └── resources
│   └── test
│       ├── java
│       └── resources

共 (1) 个答案

  1. # 1 楼答案

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

    尝试如下设置主类: "Main-Class": "Hello"

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

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

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