java - 如何解决错误: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 │ └── 资源
解决方案
在您的清单中,您已将主类定义为com.HelloWorldTesting.Hello
. 查看您的项目树,我可以看到 Hello.java 类位于您的源文件夹根目录中,并且不在包中com.HelloWorldTesting
。
尝试像这样设置你的主类:
"Main-Class": "Hello"
此外,您的 src 文件夹中有一个清单文件,并且您正在使用 gradle 生成一个清单:
manifest {
attributes(
'Implementation-Title': 'Hello World',
'Main-Class': 'Hello'
)
}
拥有多个清单文件会导致这种意外行为。从源文件夹中删除清单,运行gradle clean
,然后构建应该可以工作。
推荐阅读
- laravel - 在laravel中分组数据后如何分别显示每个组中的所有行
- schema - 将 avdl (avro schema) 字段从必需更新为可选 (NULL) 值
- haskell - 可以使用 Haskell 中的 Lists 中的单例 Nats(如 0、1、...)制作一个大小合适的列表吗?
- javascript - 当窗口中存在轻微滚动时,标题粘性会闪烁
- nativescript - this.router.back() 在 Nativescript 中带参数
- python - 有什么方法可以翻译网页语言,或者在使用scrapy抓取的同时翻译抓取的数据?
- javascript - 反应悬念/延迟延迟?
- php - EasyAdminBundle 不加载资产
- scala - 用 spark 读取 CSV 时,^G 的分隔符是什么?
- python - Django:根据用户显示不同的内容