Ошибка Gradle с отсутствием свойства mainClassName в сборке 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 found with the configuration of task ':core:startScripts'.
> No value has been specified for property 'mainClassName'.

Мои настройки: ROOT - сборка.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')
}

ROOT - настройка.Gradle в:

include 'app'
include 'core'
приложение.Gradle в:

EMPTY

основной проект-сборка.Gradle в:

dependencies {
    compile 'com.google.dagger:dagger:2.4'
    compile 'com.google.dagger:dagger-compiler:2.4'
}

И ОБА ПОДПРОЕКТА (ПОХОЖИЕ) - градля.свойства:

version = 0.1-SNAPSHOT
name = MorePianer Core Lib
mainClassName = pl.morecraft.dev.morepianer.core.Core

Я пытался добавить свойство mainClassName во многих местах, но это не работает. Это еще более странно, что он работал пару дней назад, как это. Я использую gradle в первый раз, и я думаю о переключении обратно на maven.

4 ответов


на application плагин должен знать основной класс, когда он связывает приложение.

в вашем случае, вы наносите application плагин для каждого подпроекта без указания основного класса для каждого из этих подпроектов.

у меня была та же проблема и исправила ее, указав "mainClassName" на том же уровне, что и apply plugin: 'application' :

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

если вы хотите указать его в вы могли бы написать так : projectName.mainClassName = ..


вместо настройки mainClassName попробуйте создать

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

посмотрите, пожалуйста Gradle терпит неудачу при выполнении задачи запуска для scala


я столкнулся с той же проблемой в своем проекте и решил ее, исключив из gradle.свойства:

#ogr.gradle.configurationdemand = true

всякий раз, когда мы связываем сценарий gradle с приложение плагин, Gradle ожидает, что мы укажем начальную точку приложения. Это необходимо, потому что Gradle начнет связывать ваше приложение (jar/zip), используя данное местоположение в качестве точки входа.
Эта ошибка возникает просто потому, что ш знает, что вы хотите связать свое приложение, но не знает, где начать процесс связывания.