无法为org.springframework.boot.gradle.dsl.SpringBootExtension类型的对象设置未知属性'mainClass'

时间:2018-04-20 01:28:59

标签: java spring spring-boot gradle

我有项目的主要build.gradle文件

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${spring_boot_version}")
    }
}

def javaProjects = subprojects.findAll {
    it.name in ["common", "core", "web", "app"]
}

allprojects {
    apply plugin: 'idea'
    apply plugin: 'eclipse'

    repositories {
        jcenter()
    }
}

idea {
    project {
        jdkName = "1.8"
        languageLevel = "1.8"
        vcs = "Git"
    }
}

configure(javaProjects) {
    apply plugin: 'java'
    apply plugin: 'io.spring.dependency-management'
    apply plugin: 'findbugs'

    sourceCompatibility = 1.8
    targetCompatibility = 1.8

    dependencies {
        ...
    }
}

build.gradle模块的app文件,我有一个配置来运行gradle

apply plugin: 'org.springframework.boot'

dependencies {
    ...
}

springBoot {
    mainClass = "com.web.WebApplication"
}

jar {
    manifest {
        attributes 'Implementation-Title': "Rest-Web-Services",
                'Implementation-Version': "1.0",
                'Main-Class': "com.web.WebApplication"
    }
}

当构建gradle抛出

FAILURE: Build failed with an exception.

* Where:
Build file '...\REST-Web-Services\app\build.gradle' line: 28

* What went wrong:
A problem occurred evaluating project ':app'.
> Could not set unknown property 'mainClass' for object of type org.springframework.boot.gradle.dsl.SpringBootExtension.

如何设置启动mainClass类?

3 个答案:

答案 0 :(得分:3)

配置主类

默认情况下,可执行文件存档的主类将通过在任务的类路径上的目录中使用public static void main(String[])方法查找类来自动配置。

还可以使用任务的mainClassName属性来显式配置主类:

bootJar {
    mainClassName = 'com.example.ExampleApplication'
}

或者,可以使用Spring Boot DSL的mainClassName属性在项目范围内配置主类名称:

springBoot {
    mainClassName = 'com.example.ExampleApplication'
}

如果已应用了应用程序插件,则其mainClassName项目属性可用于相同目的:

mainClassName = 'com.example.ExampleApplication'

最后,可以在任务清单上配置Start-Class属性:

bootJar {
    manifest {
        attributes 'Start-Class': 'com.example.ExampleApplication'
    }
}

Refrance

答案 1 :(得分:1)

我遵循了没有声明的Spring Restful Service tutorial,并且它有效。请尝试删除mainClass声明。

  

Spring Boot gradle插件提供了许多方便的功能:

     

它收集类路径上的所有jar并构建一个可运行的“über-jar”,这使得执行和传输服务更加方便。

     

它搜索public static void main()方法以标记为可运行的类。

     

它提供了一个内置的依赖项解析器,它设置版本号以匹配Spring Boot依赖项。您可以覆盖任何您希望的版本,但它将默认为Boot的所选版本集。

答案 2 :(得分:0)

基本上,这大约是spring-boot gradle plugin

  • 使用verboot版本的springboot2,它使用了mainClass属性,
  • v2.0.0.RELEASE起,它改为使用mainClassName