java-Gradle&Groovy-错误:找不到或加载主类
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-Gradle&Groovy-错误:找不到或加载主类,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2448字,纯文字阅读大概需要4分钟。
内容图文
![java-Gradle&Groovy-错误:找不到或加载主类](/upload/InfoBanner/zyjiaocheng/670/db8a8c36300d493daebad0847c042ce2.jpg)
我可以使用gradle run运行项目,但不能使用java -jar运行jar文件.我用以下示例项目重新创建了错误:link to project on GitHub
这是通过gradlew运行项目的输出
$./gradlew run
> Task :run
Hello world.
BUILD SUCCESSFUL in 4s
这是运行项目java -jar的输出
$./gradlew build
BUILD SUCCESSFUL in 6s
$java -jar build/libs/emailer.jar
Error: Could not find or load main class us.company.emailer.App
但是当我解压缩罐子时,我可以看到App.class
user@computer:../libs$unzip emailer.jar
Archive: emailer.jar
creating: META-INF/
inflating: META-INF/MANIFEST.MF
creating: us/
creating: us/company/
creating: us/company/emailer/
inflating: us/company/emailer/App.class
这是build.gradle
plugins {
id 'groovy'
id 'application'
}
repositories {
jcenter()
mavenCentral()
}
dependencies {
implementation 'org.codehaus.groovy:groovy-all:2.5.6'
testImplementation 'org.spockframework:spock-core:1.2-groovy-2.5'
compile 'org.apache.commons:commons-email:1.5'
}
mainClassName = 'us.company.emailer.App'
jar {
manifest {
attributes(
'Class-Path': configurations.compile.collect { it.getName() }.join(' '),
'Main-Class': 'us.company.emailer.App'
)
}
}
sourceSets.main.java.srcDirs = ['src/main/groovy']
这是App.groovy
package us.company.emailer
class App {
String getGreeting() {
return 'Hello world.'
}
static void main(String[] args) {
println new App().greeting
}
}
编辑:添加MANIFEST.MF以响应@tkruse的评论
Manifest-Version: 1.0
Class-Path: commons-email-1.5.jar javax.mail-1.5.6.jar activation-1.1.
jar
Main-Class: us.company.emailer.App
解决方法:
问题是类路径.如果您查看META-INF / MANIFEST.mf文件的内部,则可以看到它设置为:
Class-Path: commons-email-1.5.jar javax.mail-1.5.6.jar activation-1.1.
jar
当Java运行时,它不知道这些东西在哪里,它还需要groovy运行时才能理解您的groovy代码.
最简单的方法是将所有依赖项捆绑到一个“胖子”中,而Gradle的最简单方法是出色的Shadow-jar plugin.
如果将以下内容添加到build.gradle中的插件块中:
id 'com.github.johnrengelman.shadow' version '5.0.0'
(您可以删除jar块和操纵sourceSets的行)
然后运行./gradlew shadowJar
您将获得一个jar文件emailer-all.jar
可以运行:
$java -jar build/libs/emailer-all.jar
Hello world.
为了完整起见,这是完整的build.gradle文件:
plugins {
id 'groovy'
id 'application'
id 'com.github.johnrengelman.shadow' version '5.0.0'
}
repositories {
jcenter()
mavenCentral()
}
dependencies {
implementation 'org.codehaus.groovy:groovy-all:2.5.6'
testImplementation 'org.spockframework:spock-core:1.2-groovy-2.5'
implementation 'org.apache.commons:commons-email:1.5'
}
mainClassName = 'us.company.emailer.App'
内容总结
以上是互联网集市为您收集整理的java-Gradle&Groovy-错误:找不到或加载主类全部内容,希望文章能够帮你解决java-Gradle&Groovy-错误:找不到或加载主类所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。