Java 如何解决错误:文件无效或损坏
我有一个关于HelloWorld的Intellij Gradle项目。程序在IDE中运行,但运行jar文件时出现无效或损坏的jar错误。我对build.gradle和Manifest做了一些更改,但仍然没有运行。我正在使用Ubuntu 16.04 我认为这个问题与舱单有关 IDE- Intellij-2019.2 格拉德尔项目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)
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生成清单。