我正在尝试使用Gradle构建和运行Java项目。
项目构建成功,但运行时出现“无法找到或加载主类~”错误。
我找到并尝试了一个类似this的解决方案,但该解决方案不起作用。
我的项目结构在这里。
javaAddressRecorder
├── build
│ ├── classes
│ │ └── java
│ │ └── main
│ │ ├── DbAddressRecorder.class
│ │ ├── Geth.class
│ │ └── JavaAddressRecorder.class
│ ├── generated
│ │ └── sources
│ │ ├── annotationProcessor
│ │ │ └── java
│ │ │ └── main
│ │ └── headers
│ │ └── java
│ │ └── main
│ ├── libs
│ │ └── JavaAddressRecorder-1.0-SNAPSHOT.jar
│ └── tmp
│ ├── compileJava
│ │ └── previous-compilation-data.bin
│ └── jar
│ └── MANIFEST.MF
├── build.gradle
├── gradle
│ └── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── settings.gradle
└── src
├── main
│ ├── java
│ │ ├── DbAddressRecorder.java
│ │ ├── Geth.java
│ │ └── JavaAddressRecorder.java
│ └── resources
└── test
├── java
└── resources
我的build.gradle
文件在这里。
plugins {
id 'java'
}
group 'org.example'
version '1.0-SNAPSHOT'
repositories {
mavenCentral()
}
dependencies {
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.9.0'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.9.0'
implementation 'org.web3j:core:5.0.0'
implementation 'org.slf4j:slf4j-simple:2.0.5'
runtimeOnly 'mysql:mysql-connector-java:8.0.30'
}
test {
useJUnitPlatform()
}
jar {
manifest {
attributes(
'Main-Class': 'JavaAddressRecorder'
)
}
from {
configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
}
duplicatesStrategy = DuplicatesStrategy.INCLUDE
}
src/main/java/JavaAddressRecorder.java
具有main()
,但没有软件包名称。src/main/java/DbAddressRecorder.java
和src/main/java/Geth.java
是从main()
使用的。
因此./gradlew build
工作时没有任何错误,但java -jar JavaAddressRecorder-1.0-SNAPSHOT.jar
不工作时出现以下错误。
Error: Could not find or load main class JavaAddressRecorder
Caused by: java.lang.ClassNotFoundException: JavaAddressRecorder
我确认了JavaAddressRecorder
包含在jar文件中,如下所示。
******@****** libs % jar tf javaAddressRecorder-1.0-SNAPSHOT.jar | grep JavaAddressRecorder.class
JavaAddressRecorder.class
我是Java语言的新手。
任何知道如何解决这个问题的人,请告诉我。
集成开发环境:IntelliJ IDEA
操作系统:MacOS 11.6.8
Java:Java(TM)SE运行时环境(内部版本17.0.5+9-LTS-191)
等级:7.5.1
- 从.jar文件添加元INF/清单.MF *
******** META-INF % cat MANIFEST.MF
Manifest-Version: 1.0
Main-Class: JavaAddressRecorder
1条答案
按热度按时间7z5jn7bk1#
我找到了一个使用shadowJar的解决方案。
build.gradle
在这里。然后跑