Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何解决错误:文件无效或损坏_Java_Gradle_Intellij Idea_Intellij 13 - Fatal编程技术网

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

Java 如何解决错误:文件无效或损坏,java,gradle,intellij-idea,intellij-13,Java,Gradle,Intellij Idea,Intellij 13,我有一个关于HelloWorld的Intellij Gradle项目。程序在IDE中运行,但运行jar文件时出现无效或损坏的jar错误。我对build.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)

我有一个关于HelloWorld的Intellij Gradle项目。程序在IDE中运行,但运行jar文件时出现无效或损坏的jar错误。我对build.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");
    }
}
错误:无效或损坏的jar文件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 . ├── 建造 │   ├── 班级 │   │   └── JAVA │   │   └── 主要的 │   │   └── 同学们好 │   └── tmp │   └── 内贾瓦 ├── 格雷德尔先生 ├── 格拉德尔 │   └── 包装纸 │   ├── gradle-wrapper.jar │   └── gradle-wrapper.properties ├── 格拉德卢 ├── 格拉德勒蝙蝠 ├── META-INF │   └── MANIFEST.MF ├── 出来 │   └── 人工制品 │   ├── HelloWorldArt_罐 │   │   └── HelloWorldArt.jar │   └── HelloWorldArt\u主罐 │   └── HelloWorldArt.main.jar ├── 格雷德尔酒店 ├── src │   ├── 主要的 │   │   ├── JAVA │   │   │   ├── 程序过程 │   │   │   └── META-INF │   │   │   └── MANIFEST.MF │   │   └── 资源 │   └── 测试 │   ├── JAVA │   └── 资源
在清单中,您已将主类定义为
com.HelloWorldTesting.Hello
。 查看您的项目树,我可以看到Hello.java类位于源文件夹根目录中,不在包
com.HelloWorldTesting

尝试如下设置主类:
“主类”:“你好”

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

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

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

您可以尝试从gradle的jar部分{configurations.runtimeClasspath.collect…}中删除吗。@Sambit-更改后出现相同错误。重新创建jar文件。@user207421现在可以工作了,问题是两个清单文件。相同错误-更多详细信息-trevor@trevor-Lenovo-YOGA-510-14AST:~/delege/HelloWorldArt$find./-name MANIFEST.MF./src/main/java/META-INF/MANIFEST.MF./META-INF/MANIFEST.MFtrevor@trevor-Lenovo-YOGA-510-14AST:~/delegate/HelloWorldArt$more./META-INF/MANIFEST.MF清单版本:1.0主类:您好trevor@trevor- LeoVo-Yya510-14AST:~/Orth/HeloReloLDAR-不确定空白行是否在结束时显化了差异。您尝试过没有“Of”和“CaveVaseBaseNeNe”的JAR任务的最基本版本吗?代码>jar{manifest{attributes'Main Class':'Hello'}如果使用gradle生成清单,为什么您的src文件夹中会有清单?Michael Kleinmann-我将构建工件项目结构中的目录指定为src目录,这是Intellij的默认目录。我应该换这个吗?正如我在上面发布的,它现在似乎有两个清单。我认为这可能是一个问题。好吧,我不知道这些IntelliJ默认值。我刚刚在IntelliJ中创建了一个新的gradle项目,在src/main/java下添加了Hello类,并在build.gradle中配置了jar任务,如下所示:
jar{manifest{attributes'main class':'Hello'}}
它构建并运行时没有任何问题,因此,我认为您需要从src文件夹中删除清单,因为您正在使用gradle生成清单。