2016-04-28 19 views
5

ho configurazione graddle con due sottoprogetti e quando voglio fare accumulo il progetto viene lanciato il seguente errore:errore Gradle con la mancanza di proprietà mainClassName in Gradle costruire

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'. 

La mia configurazione: ROOT - costruzione .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 - setting.gradle:

include 'app' 
include 'core' 

APP DEL PROGETTO - build.gradle:

EMPTY

NUCLEO PROGETTO - build.gradle:

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

ed entrambi SOTTOPROGETTI (simile) - gradle.properties:

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

Ho provato ad aggiungere la proprietà mainClassName in molti posti, ma non funziona. Questo è ancora più strano, che ha funzionato un paio di giorni fa così com'è. Sto usando gradle per la prima volta e sto pensando di tornare a Maven.

risposta

22

Il plug-in application deve conoscere la classe principale per quando raggruppa l'applicazione.

Nel tuo caso, si applica il plug-in application per ciascun sottoprogetto senza specificare la classe principale per ciascuno di questi sottoprogetti.

ho avuto lo stesso problema e risolto specificando "mainClassName" allo stesso livello come apply plugin: 'application':

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

Se si desidera specificare nel file gradle.properties potrebbe essere necessario scrivere come: projectName.mainClassName = ..

+0

ho cercato di aggiungere: ' applicare plugin: 'applicazione' mainClassName = 'pl.morecraft.dev.morepianer.core.Core'' o' projectName.mainClassName' in proprietà, ma, purtroppo, non serviva a niente:/ –

+0

Hai provato a inserire la riga mainClassName nel file di build anziché nel file delle proprietà? – zlandorf

+0

Sì, ho provato –

1

Invece di creare mainClassName cercare di creare

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

per favore guarda Gradle fails when executes run task for scala

+0

Grazie! Questo ha fatto il trucco con gradle versione 4.4 e SpringBoot 1.4.0 – Casper