【问题标题】:No value has been specified for property 'mainClassName'没有为属性“mainClassName”指定值
【发布时间】:2015-08-01 08:13:03
【问题描述】:

我正在尝试用

构建一个项目
apply plugin: 'spring-boot'

但它会在步骤 startScripts

处引发异常
:common:compileJava UP-TO-DATE
:common:processResources UP-TO-DATE
:common:classes UP-TO-DATE
:common:jar UP-TO-DATE
:common:findMainClass
:common:startScripts FAILED

FAILURE: Build failed with an exception.

* What went wrong:
A problem was found with the configuration of task ':common:startScripts'.
> No value has been specified for property 'mainClassName'.

但是我真的不需要这个模块的主类。我该如何解决?

【问题讨论】:

  • 您的 spring-boot 应用程序有哪些依赖项?是否存在 spring-boot-starter 依赖项?
  • 不,我实际上只有 testCompile("junit:junit") 在依赖项中。

标签: gradle spring-boot


【解决方案1】:

在 Spring-Boot 的 GitHub 上有一张关于此问题的公开票:https://github.com/spring-projects/spring-boot/issues/2679。根据讨论,您可以做几件事:

  • buildscript 部分中删除spring-boot 插件。这将从构建流程中移除特殊的 Gradle 任务。
  • mainClassName 分配给某个随机字符串。它不漂亮,但就它不是可运行的应用程序而言,您可能不关心主类。
  • 如果您想尝试,可以通过链接列出一些更庞大的方法来解决此问题。

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    您需要一个调用SpringApplication.run(...)main 方法。像这样:

    public static void main(String[] args) throws Exception {
      SpringApplication.run(Example.class, args);
    }
    

    Gettings started 指南中有一段关于main 方法的段落:

    我们应用程序的最后一部分是 main 方法。这只是一个 遵循应用程序 Java 约定的标准方法 入口点。我们的 main 方法委托给 Spring Boot 的 SpringApplication类通过调用run。 SpringApplication 将 引导我们的应用程序,启动 Spring,然后启动 自动配置的 Tomcat Web 服务器。我们需要通过 Example.class 作为 run 方法的参数来告诉 SpringApplication 哪个是 主要的 Spring 组件。 args 数组也被传递到 公开任何命令行参数。

    我建议创建一个 Application 类,一切从这里开始:

    @SpringBootApplication
    public class Application {
        public static void main(String[] args) {
            SpringApplication.run(Application.class, args);
        }
    }
    

    但是,也许您应该首先从 Quick start 指南开始。

    【讨论】:

    • 库模块怎么样,不一定要有主类,对吧?
    • 如果它是一个库,则不需要spring-boot 插件。图书馆应该怎么做?
    • spring-boot 应用程序是一个独立的应用程序。如果你有一个库而不是spring-boot 应用程序。
    • 如果没有spring-boot插件,config gradle的方式会有所不同,比如我不能使用testCompile("junit:junit")添加依赖。我也无法使用插件提供的那些功能。
    • 当然可以有这个依赖。你只需要一个简单的build.gradleapply plugin: 'java' repositories { mavenCentral() } dependencies { testCompile 'junit:junit:4.12' }
    【解决方案3】:

    我在build.gradle 的末尾有以下内容来定义主类的名称。

    我也使用gradlew bootjar 而不是gradlew build

    bootJar {
        mainClassName = 'com.spring.xx.app.App'
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-20
      • 1970-01-01
      • 1970-01-01
      • 2019-09-25
      • 2019-04-15
      • 2010-09-26
      相关资源
      最近更新 更多