无法找到主类: bootRepackage。

32

我在gradle构建中遇到了问题。我使用Spring官网提供的标准(https://spring.io/guides/gs/rest-service/),但是当我尝试使用gradle构建时,出现了以下错误:

My gradle problem

这个 Gradle 版本无法使用,但是当我使用另一个版本(我在学校时用的)时,它完美地运行。


你是否实际上有一个主方法(在指南中它在Application类中)? - Dave Syer
我在/main/java/hello/Application.class中有一个:包 main.java.hello;public class Application { public static void main() { System.out.println("测试"); } } - mfrachet
是"/main/java"还是"./src/main/java"?也许你可以把你的代码放到GitHub或其他地方吗? - Dave Syer
3
一个 main() 方法需要 String[] args 吗? - Dave Syer
那就是,谢谢你们的一切 :-) - mfrachet
7个回答

33

有两种可能性

  1. 您的源目录未放置在正确的位置(使用sourceSets指令来解决此问题。您的源目录应该类似于src/main/java/your/package
  2. 添加以下内容以指示您的主类所在位置

springBoot {
     mainClass = "hello.FileUploader"
}

我相当肯定这是1。


3
对我来说,是第二种情况。:) 当我决定使用Spring Boot时,我没有意识到需要配置主类。我仍在摸索Gradle和Spring Boot... - Igor Donin
对我来说,问题出在我没有将java添加到环境变量中——我把路径设置成了src/main/my/package而不是src/main/java/my/package - Ryan Heathcote
我正在使用与此答案(https://dev59.com/lmEh5IYBdhLWcg3wrU8N#22164339)中配置的 build.gradle 共同编译 Java 和 Groovy,换句话说,我移动了 sourceSets。对我来说,方法#2起作用了。 - Paul

23

我也遇到了这个问题,这是我解决问题的方法:

如果您的项目仅是其他项目中使用的模块,请改用 org.springframework.boot:spring-boot-starter 而不是 org.springframework.boot:spring-boot-starter-web

或在 gradle 中设置主类:

mainClassName = 'your.package.MainClass'

或者只需禁用bootRepackage

bootRepackage {
    enabled = false
}

1
我刚刚禁用了重新打包,因为在我的情况下它只是一个共享项目。 - gstackoverflow

7

你的项目中没有主方法(否则插件会找到一个)。主方法有非常特定的签名,因此请检查是否有public static void main(String[] args)


4
不真实,我也遇到了同样的问题,我的项目中有一个公共静态 void main(String[] args)。 - black sensei

6
如果主类没有在当前项目中定义,但您想为某些目的(例如sprint集成测试)启动它。请按照以下步骤操作:

添加

bootRepackage {
    mainClass = 'your.app.package.Application'
}

在 build.gradle 文件中,在 apply plugin: 'spring-boot' 之后(因为该插件需要被加载),修复这个问题。

2

我知道这篇文章很老了,但是在尝试构建我的第一个Spring Boot应用程序时(https://spring.io/guides/gs/spring-boot/#scratch),我遇到了这个问题。 因此,在教程中提到的pom.xml文件的位置是不正确的。你需要将它放在src文件夹之外。 因此,这是最终的目录结构 - /workspace/src/main/java/hello/HelloController.java /workspace/src/main/java/hello/Application.java /workspace/pom.xml


1

我也遇到了这个问题。

我曾经被build.gradle文件的位置所困惑:我认为它应该位于src/main/java/hello,因为在创建此子目录结构的指令之后提到了它。

它应该放置在包含src文件夹的根文件夹中。一旦我这样做并从根文件夹而不是按照指南指示运行"./gradlew build",则可以成功构建。

我没有执行gradle的标准安装,只是下载了二进制文件,可能这就是"./gradlew build"失败的原因。


1

我通过指定编码解决了这个问题。可能是因为我在IDE中编写代码。

java -Dfile.encoding=UTF-8 -jar build <filename>.jar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接