Java Gradle生成中缺少mainClassName属性的Gradle错误

Java Gradle生成中缺少mainClassName属性的Gradle错误,java,gradle,Java,Gradle,我有两个子项目的graddle配置,当我想要构建项目时,会抛出以下错误: Executing external task 'build'... :core:compileJava :core:processResources UP-TO-DATE :core:classes :core:jar :core:startScripts FAILED FAILURE: Build failed with an exception. * What went wrong: A problem was

我有两个子项目的graddle配置,当我想要构建项目时,会抛出以下错误:

Executing external task 'build'...
:core:compileJava
:core:processResources UP-TO-DATE
:core:classes
:core:jar
:core:startScripts FAILED

FAILURE: Build failed with an exception.

* What went wrong:
A problem was found with the configuration of task ':core:startScripts'.
> No value has been specified for property 'mainClassName'.
我的配置: ROOT-build.gradle:

subprojects {

    apply plugin: 'java'
    apply plugin: 'application'

    group = 'pl.morecraft.dev.morepianer'

    repositories {
        mavenLocal()
        mavenCentral()
    }

    run {
        main = project.getProperty('mainClassName')
    }

    jar {
        manifest {
            attributes 'Implementation-Title': project.getProperty('name'),
                    'Implementation-Version': project.getProperty('version'),
                    'Main-Class': project.getProperty('mainClassName')
        }
    }

}

task copyJars(type: Copy, dependsOn: subprojects.jar) {
    from(subprojects.jar)
    into project.file('/jars')
}
dependencies {
    compile 'com.google.dagger:dagger:2.4'
    compile 'com.google.dagger:dagger-compiler:2.4'
}
ROOT-setting.gradle:

include 'app'
include 'core'
应用程序项目-build.gradle:

subprojects {

    apply plugin: 'java'
    apply plugin: 'application'

    group = 'pl.morecraft.dev.morepianer'

    repositories {
        mavenLocal()
        mavenCentral()
    }

    run {
        main = project.getProperty('mainClassName')
    }

    jar {
        manifest {
            attributes 'Implementation-Title': project.getProperty('name'),
                    'Implementation-Version': project.getProperty('version'),
                    'Main-Class': project.getProperty('mainClassName')
        }
    }

}

task copyJars(type: Copy, dependsOn: subprojects.jar) {
    from(subprojects.jar)
    into project.file('/jars')
}
dependencies {
    compile 'com.google.dagger:dagger:2.4'
    compile 'com.google.dagger:dagger-compiler:2.4'
}
EMPTY

核心项目-build.gradle:

subprojects {

    apply plugin: 'java'
    apply plugin: 'application'

    group = 'pl.morecraft.dev.morepianer'

    repositories {
        mavenLocal()
        mavenCentral()
    }

    run {
        main = project.getProperty('mainClassName')
    }

    jar {
        manifest {
            attributes 'Implementation-Title': project.getProperty('name'),
                    'Implementation-Version': project.getProperty('version'),
                    'Main-Class': project.getProperty('mainClassName')
        }
    }

}

task copyJars(type: Copy, dependsOn: subprojects.jar) {
    from(subprojects.jar)
    into project.file('/jars')
}
dependencies {
    compile 'com.google.dagger:dagger:2.4'
    compile 'com.google.dagger:dagger-compiler:2.4'
}
和两个子项目(类似)-gradle.properties:

version = 0.1-SNAPSHOT
name = MorePianer Core Lib
mainClassName = pl.morecraft.dev.morepianer.core.Core
#ogr.gradle.configurationdemand = true

我尝试在许多地方添加mainClassName属性,但它不起作用。更奇怪的是,它在几天前就开始工作了。我第一次使用gradle,我正在考虑切换回maven。

应用程序插件需要知道绑定应用程序时的主类

在您的例子中,您为每个子项目应用
应用程序
插件,而不为每个子项目指定主类

我遇到了同样的问题,并通过在与
apply plugin:'application'
相同的级别上指定“mainClassName”来修复它:

apply plugin: 'application'
mainClassName = 'com.something.MyMainClass'

如果您想在
gradle.properties
文件中指定它,您可能必须将其编写为:
projectName.mainClassName=..
而不是设置mainClassName,尝试创建

task run(type: JavaExec, dependsOn: classes) {
    main = 'com.something.MyMainClass'
    classpath = sourceSets.main.runtimeClasspath
}

请看

我在项目中遇到了同样的问题,并通过排除gradle.properties解决了这个问题:

version = 0.1-SNAPSHOT
name = MorePianer Core Lib
mainClassName = pl.morecraft.dev.morepianer.core.Core
#ogr.gradle.configurationdemand = true

每当我们将gradle脚本与应用程序插件绑定时,gradle都希望我们指出应用程序的起点。这是必要的,因为Gradle将开始使用给定位置作为入口点绑定您的应用程序(jar/zip)。

抛出此错误的原因很简单,Gradle知道您要绑定应用程序,但不知道从何处开始绑定过程

可以将
mainClassName
指定为项目扩展属性:

ext {
    mainClassName = 'com.something.MyMainClass'
}

我曾尝试在属性中添加:
apply plugin:'application'mainClassName='pl.morecraft.dev.morepianer.core.core'
projectName.mainClassName
,但不幸的是没有任何帮助:/n您是否尝试将行mainClassName放在构建文件而不是属性文件中?对于Kotlin DSL,当在
plugins{application/*…*/}
中指定
application
插件时,还要将其配置为:
application{mainClassName=“com.something.MyMainClass”}
我刚刚从
build.gradle
中删除了这一行(我正在使用IntelliJ)
mainClassName='MyProjectName'
谢谢!这在gradle版本4.4和SpringBoot 1.4.0中起到了作用,但我不能使用“run”这个名称,所以我使用了“customRun”。使用“运行”:“无法添加任务“运行”,因为具有该名称的任务已存在。”