Gradle构建生成脚本运行报错:无法找到或加载主类如何解决?
解决Gradle Application插件脚本找不到主类的问题
问题根源
直接运行app/build/scripts/myproj时,脚本的类路径未正确包含编译后的类文件及依赖jar包,导致JVM无法定位主类。application插件默认生成的脚本需要配合完整的分发目录结构(含lib目录的依赖包)才能正常工作,仅执行build任务只会生成瘦jar和未配置完整类路径的脚本。
可行修复方案
方案1:生成完整分发包(推荐用于生产/分发)
执行Gradle的分发任务,生成包含所有依赖和正确类路径的可执行包:
gradle distZip # 或生成tar格式包 gradle distTar
任务完成后,在app/build/distributions/目录下找到压缩包,解压后进入bin目录,运行其中的myproj脚本即可正常启动。
方案2:临时修改脚本类路径(仅用于本地调试)
若想直接运行build/scripts下的脚本,可修改application配置,让脚本强制使用完整的运行时类路径:
application { mainClass = 'com.anentropic.myproj.MyProj' applicationName = "myproj" // 配置JVM参数,指定完整运行时类路径 applicationDefaultJvmArgs = ["-cp", sourceSets.main.runtimeClasspath.asPath] }
重新执行gradle build后,即可直接运行app/build/scripts/myproj。但该方式依赖本地Gradle构建目录,不适合分发。
方案3:生成可执行Fat Jar(备选)
如果不需要shell脚本,可配置jar任务生成包含所有依赖的可执行jar:
jar { archiveBaseName = "myproj" manifest { attributes 'Main-Class': 'com.anentropic.myproj.MyProj' } // 将所有依赖打包进jar from { configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } } }
执行gradle jar后,在app/build/libs/myproj.jar路径下,直接用以下命令运行:
java -jar app/build/libs/myproj.jar
内容的提问来源于stack exchange,提问作者Anentropic
相关产品推荐
相关产品推荐

