Gradle构建中缺少mainClassName属性的Gradle错误

Mat*_*iak 20 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 found with the configuration of task ':core:startScripts'.
> No value has been specified for property 'mainClassName'.
Run Code Online (Sandbox Code Playgroud)

我的配置: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')
}
Run Code Online (Sandbox Code Playgroud)

ROOT - setting.gradle:

include 'app'
include 'core'
Run Code Online (Sandbox Code Playgroud)

APP PROJECT - build.gradle:

EMPTY

核心项目 - build.gradle:

dependencies {
    compile 'com.google.dagger:dagger:2.4'
    compile 'com.google.dagger:dagger-compiler:2.4'
}
Run Code Online (Sandbox Code Playgroud)

AND BOTH SUBPROJECTS(SIMILAR) - gradle.properties:

version = 0.1-SNAPSHOT
name = MorePianer Core Lib
mainClassName = pl.morecraft.dev.morepianer.core.Core
Run Code Online (Sandbox Code Playgroud)

我试图在许多地方添加mainClassName属性,但它不起作用.这甚至是陌生的,它在几天前就已经发挥作用了.我第一次使用gradle而且我正在考虑切换回maven.

小智 57

application插件需要知道当它捆绑的应用程序的主类.

在您的情况下,您application为每个子项目应用插件,而不指定每个子项目的主类.

我遇到了同样的问题并通过在同一级别指定"mainClassName"来修复它apply plugin: 'application':

apply plugin: 'application'
mainClassName = 'com.something.MyMainClass'
Run Code Online (Sandbox Code Playgroud)

如果要在gradle.properties文件中指定它,可能必须将其写为:projectName.mainClassName = ..

  • 我试图添加:`apply plugin: 'application' mainClassName = 'pl.morecraft.dev.morepianer.core.Core'` 或 `projectName.mainClassName` 在属性中,但不幸的是没有任何帮助:/ (2认同)
  • 对于 Kotlin DSL,在 `plugins { application /* ... */ }` 中指定 `application` 插件时,还要配置: `application { mainClassName = "com.something.MyMainClass" }` (2认同)

Mik*_*a16 7

尝试创建而不是设置 mainClassName

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

请查看Gradle 在执行 scala 的运行任务时失败