我有一个 HelloWorld 的 Intellij Gradle 项目。该程序在 IDE 中运行,但运行 jar 文件时出现无效或损坏的 jar 错误。我对 build.gradle 和 Manifest 进行了一些更改,但仍然无法运行。我使用的是 Ubuntu 16.04。
我认为该问题与 list 有关。
集成开发环境 -
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)
构建.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");
}
}
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
最佳答案
在 list 中,您已将主类定义为com.HelloWorldTesting.Hello
。
查看您的项目树,我可以看到 Hello.java 类位于源文件夹根目录中,而不是在 com.HelloWorldTesting
包中。
尝试像这样设置你的主类:
“主类”:“你好”
此外,您的 src 文件夹中有一个 list 文件并且您正在使用 gradle 生成 list :
manifest {
attributes(
'Implementation-Title': 'Hello World',
'Main-Class': 'Hello'
)
}
拥有多个 list 文件会导致这种意外行为。从源文件夹中删除 list ,运行 gradle clean ,之后构建应该可以工作。
关于java - 如何解决错误: Invalid or corrupt jarfile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57216444/